大家好,本文将探讨数据探索性分析的两个基本方面:数据集形状和空值。我们将深入了解Pandas如何简化这些任务,重点关注需要同时分析多个表格的情况。使用的库是pandas
和tabulate
。
数据集形状
要检索单个表格的形状,可以使用.shape
属性。例如,如果有一个名为df
的DataFrame,我们可以使用df.shape
访问其形状,这将返回一个包含DataFrame行数和列数的元组。
了解数据集的形状是很有价值的,因为它可以帮助我们理解其大小和结构。通过了解行的数量,可以估计正在处理的数据量,而列的数量则揭示了可用于分析的变量或特征。对形状信息的解读使我们能够对数据转换、内存需求和分析潜在限制做出明智的决策。
现在,我们将通过实际的示例来解释和利用真实世界场景中的形状信息。按照以下步骤进行:
-
导入Pandas:首先导入Pandas库,这是在Python中进行数据操作和分析的强大工具:
import pandas as pd
- 读取表格:从Olist数据集中读取相关的表格,该数据集提供了巴西电子商务数据的数据集,这些表格代表了业务的不同方面,包括客户、订单、产品和评论。
customer = pd.read_csv('olist_customers_dataset.csv')
geolocation = pd.read_csv('olist_geolocation_dataset.csv')
order_items = pd.read_csv('olist_order_items_dataset.csv')
order_payments = pd.read_csv('olist_order_payments_dataset.csv')
order_reviews = pd.read_csv('olist_order_reviews_dataset.csv')
orders = pd.read_csv('olist_orders_dataset.csv')
products = pd.read_csv('olist_products_dataset.csv')
sellers = pd.read_csv('olist_sellers_dataset.csv')
-
将表格保存到字典中:将导入的表格存储在字典中。这种方法可以方便地管理和同时访问多个表格,便于跨数据集进行分析。
tables= {
"customer":customer,
"geolocation": geolocation,
"order_items":order_items,
"order_payments":order_payments,
"order_reviews":order_reviews,
"orders":orders,
"products":products,
"sellers":sellers
}
-
遍历表格:使用循环遍历字典并读取每个表格的形状。这提供了Olist数据集中每个表格的行数和列数:
for k,v in tabelas.items():
print(f'{k}:{v.shape}')
只需两行代码,就可以输出所有的形状。
处理多个表格中的空值
识别和处理空值是数据分析中的一项关键任务,因为缺失的数据可能会影响结果的准确性和可靠性。识别具有空值的列的最简单方法是结合使用.isna()
和.sum()
方法:
orders.isna().sum()
通过将每列中空值的总和除以表格中的记录总数,并将其乘以100,可以计算出空值的百分比,这样就能了解每列中缺失数据的情况。分析空值的百分可使我们能够优先处理具有更高缺失值比例的列,从而提高数据分析的准确性和有效性。
orders.isna().sum()/len(orders) * 100
经过分析发现空值最多的列,即订单表约有3%的空值,现在对多个表格执行相同的分析操作。使用以下代码能够在分析中识别并显示任何数据集的空值:
from tabulate import tabulate
for k, v in tables.items():
# 用列名创建一个列表
cols = v.columns.tolist()
# 创建一个列表,列出每一列的空值的百分比
null_values = [v[col].isna().sum() / len(v) * 100 for col in cols]
# 用列名和空值创建一个列表
formatted_table = [[col, null_value] for col, null_value in zip(cols, null_values)]
# 输出格式化的表格
print(f"\nNull values in table {k.upper()}:\n")
print(tabulate(formatted_table, headers=["Column", "Percentage of Null Values"], tablefmt="grid"))
print('\n')
对于每个数据集,可以看到有的列的空值比例为0,而有的列具有较多的空值。