[英]Converting a multi-dimensional dictionary which contains an array of pandas series to a csv
我有一些 python 代码来创建一个字典,其中的键后面跟着一个包含熊猫系列的可变长度数组的值。
{"key1":[series1,series2,series3], "key2":[series4,series5,series6,..],...}
所有数据框都包含 2 列,词和频率
我想知道将这种数据结构转换为 csv 的最合适方法是什么。 按以下格式。
key, Word, frequency
key1, series1[0][0], series1[0][1]
key1, series1[1][0], series1[1][1]
......
key10, series76[100][0], series76[100][1] #<-Arbitrary indexes.
我试过遍历字典并这样做。 但是,该系列的剩余部分会保存到 CSV 中,例如
Length: 65, dtype: int64]
因此,理想情况下,我想在这种情况下使用 pandas.to_csv() 以便不需要手动解析此数据。
将concat
与列表理解结合使用:
s1 = pd.Series([2,3],index=['aaa','bbb'])
s2 = pd.Series([1,2,3],index=['ccc','fff','ggg'])
s3 = pd.Series([4,5],index=['ddd','eee'])
d = {"key1": [s1, s2], "key2": [s3]}
df = pd.concat([pd.DataFrame({'key': k, 'word': x.index, 'freq': x.to_numpy()})
for k, v in d.items()
for x in v
if isinstance(x, pd.Series)], ignore_index=True)
print (df)
key word freq
0 key1 aaa 2
1 key1 bbb 3
2 key1 ccc 1
3 key1 fff 2
4 key1 ggg 3
5 key2 ddd 4
6 key2 eee 5
df.to_csv("output.csv", index=False)
一种方法:
import pandas as pd
# toy data
df1 = pd.DataFrame([["hello", 1], ["world", 1]], columns=["word", "frequency"])
df2 = pd.DataFrame([["quick", 10], ["brown", 1], ["fox", 3]], columns=["word", "frequency"])
df3 = pd.DataFrame([["rice", 9], ["salt", 1], ["sugar", 7]], columns=["word", "frequency"])
data = {"key1": [df1, df2], "key2": [df3]}
# split in keys and values
keys, values = zip(*[(key, value) for key, values in data.items() for value in values])
# use the keys parameter of concat
df = pd.concat(values, keys=keys).droplevel(-1).reset_index().rename(columns={ "index" : "key"})
df.to_csv("output.csv", index=False)
输出(输出.csv)
key,word,frequency
key1,hello,1
key1,world,1
key1,quick,10
key1,brown,1
key1,fox,3
key2,rice,9
key2,salt,1
key2,sugar,7
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.