在我使用pivot_table作为Dataframe并将数据保存到Parquet文件后,我正在松散索引列。
import dask.dataframe as dd
import pandas as pd
df=pd.DataFrame()
df["Index"]=[1,2,3,1,2,3]
df["Field"]=["A","A","A","B","B","B"]
df["Value"]=[10,20,30,100,120,130]
df
我的数据:
Index Field Value
0 1 A 10
1 2 A 20
2 3 A 30
3 1 B 100
4 2 B 120
5 3 B 130
Dask代码:
ddf=dd.from_pandas(df,2)
ddf=ddf.categorize("Field")
ddf=ddf.pivot_table(values="Value", index="Index", columns="Field")
dd.to_parquet("1.parq",ddf)
dd.read_parquet("1.parq").compute()
这就产生了一个错误:
ValueError:存在多个可能的索引:'A','B‘。请选择一个索引=‘索引名称’
我可以选择A或B作为索引,但是我缺少index列。
我尝试了dd.to_parquet("1.parq",ddf, write_index=True)
,但是它给了我以下错误:
TypeError:无法将项插入到尚未存在类别的CategoricalIndex中
有人能帮我把“索引”列的表保存到Parquet文件中吗?
PS:
ddf.pivot_table(values="Value", index="Index", columns="Field").compute()
给出了预期的结果:
Field A B
Index
1 10.0 100.0
2 20.0 120.0
3 30.0 130.0
而且使用Pandas不是一个解决方案,因为我的数据是20 GB。
编辑:
我试过了
ddf.columns = list(ddf.columns)
dd.to_parquet("1.parq",ddf, write_index=True)
这给了我一个新的错误:
dask.async.TypeError:预期的字节列表
Google显示,这些错误都是来自于“旋风”异步库。
发布于 2017-03-07 16:46:10
这里有两个问题:
pivot_table
生成的列索引是绝对的,因为您使原始列“字段”是绝对的。将索引写入数据帧上调用reset_index,熊猫无法为列索引添加新的值,因为它是绝对的。您可以使用ddf.columns = list(ddf.columns)
来避免这种情况。整个街区现在看起来如下:
ddf = dd.from_pandas(df,2)
ddf = ddf.categorize("Field")
ddf = ddf.pivot_table(values="Value", index="Index", columns="Field")
ddf.columns = list(ddf.columns)
ddf = ddf.reset_index()
ddf['index'] = ddf.index.astype('int64')
dd.to_parquet("1.parq", ddf)
https://stackoverflow.com/questions/42636152
复制相似问题