数据透视表(Pivot Table)是一种数据汇总工具,能够对数据进行分组、聚合和重新排列,以便从不同角度分析数据。在Python中,pandas库提供了强大的数据透视表功能。
pandas提供两个主要函数创建透视表:
pivot_table()
:功能全面的透视表函数crosstab()
:专门用于计算频率表的简化版本对于超大型数据集(超过内存容量),可以使用dask.dataframe:
import dask.dataframe as dd
ddf = dd.read_csv('large_dataset.csv')
result = ddf.groupby(['category', 'subcategory']).sum().compute()
# 读取时指定数据类型
dtypes = {'id': 'int32', 'value': 'float32'}
df = pd.read_csv('large.csv', dtype=dtypes)
# 使用分类类型减少内存
df['category'] = df['category'].astype('category')
chunksize = 10**6
chunks = pd.read_csv('very_large.csv', chunksize=chunksize)
result = pd.DataFrame()
for chunk in chunks:
temp = chunk.pivot_table(index='date', columns='product', values='sales', aggfunc='sum')
result = result.add(temp, fill_value=0)
import pandas as pd
import numpy as np
# 创建大型示例数据
size = 10**6
dates = pd.date_range('20200101', periods=365)
df = pd.DataFrame({
'date': np.random.choice(dates, size),
'product': np.random.choice(['A', 'B', 'C', 'D'], size),
'region': np.random.choice(['North', 'South', 'East', 'West'], size),
'sales': np.random.randint(100, 10000, size),
'cost': np.random.randint(50, 5000, size)
})
# 基本透视表
pivot1 = pd.pivot_table(df,
index=['date', 'region'],
columns='product',
values='sales',
aggfunc=['sum', 'mean'])
# 多值聚合
pivot2 = pd.pivot_table(df,
index='region',
columns='product',
values=['sales', 'cost'],
aggfunc={'sales': ['sum', 'mean'],
'cost': ['sum', np.std]})
# 添加总计
pivot3 = pd.pivot_table(df,
index='region',
columns='product',
values='sales',
aggfunc='sum',
margins=True,
margins_name='Total')
原因:数据集太大,超出可用内存 解决:
dask
或modin
库原因:aggfunc或分组键设置不当 解决:
dropna=False
保留所有分组原因:数据量大或操作复杂 解决:
category
类型通过合理使用这些技术,可以在Python中高效处理大型数据透视表任务。
没有搜到相关的文章