簡體   English   中英

將包含熊貓系列數組的多維字典轉換為 csv

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM