我的脚本中的函数返回John
的字典,如下所示:
{ "Apple": 10, "Mango": 20, "Banana":30}
每次调用函数时,键和值都不一定相同。例如,它还可以生成Jen
的字典,例如
{ "Apple": 10, "Banana":30, "Watermelon": 5}
我希望将值更新为csv(或pandas数据帧,然后更新为csv)以存储它以供以后分析。 csv的所需输出是:
Name | Apple | Banana | Mango | Watermelon |
------------------------------------------
John | 10 | 30 | 20 |
Jen | 10 | 30 | | 5
所以,puedocode如下:
if dictionary-keys == csv_or_df_header:
add value to corresponding columns by matching keys with column headers
else:
add the new key as a column header
add value to corresponding columns by matching keys with column headers
答案 0 :(得分:2)
pandas append函数可以为您完成大部分工作。这段代码:
import pandas as pd
df = pd.DataFrame({'Apple': 10, "Mango": 20, "Banana": 30}, index=['John'])
jen = pd.Series({"Apple": 10, "Banana": 30, "Watermelon": 5}, name='Jen')
df = df.append(jen)
print(df)
得出这个结果:
Apple Banana Mango Watermelon
John 10.0 30.0 20.0 NaN
Jen 10.0 30.0 NaN 5.0
如果你想从那里移动它to csv,你可以在程序的末尾添加df.to_csv(csv_filepath)
,它会将它导出到你指定的文件路径。
答案 1 :(得分:1)
因此,如果您的数据如下所示:
data = {'John': { "Apple": 10, "Mango": 20, "Banana":30},
'Jen': { "Apple": 10, "Banana":30, "Watermelon": 5}}
您可以从中创建dataframe
:
df = pd.DataFrame.from_dict(data, orient='index')
要更新它,您可以恢复为dict:
df = df.to_dict(orient='index')
更新字典:
update = {'Jack': { "Apple": 10, "Mango": 20, "Kiwi":60}}
df.update(update)
然后将其推回dataframe
:
df = pd.DataFrame.from_dict(df, orient='index')
此外,如果您想要替换NaN
,请在最后使用fillna()
:
df = pd.DataFrame.from_dict(df, orient='index').fillna('').astype(int,raise_on_error=False)
结果:
Mango Watermelon Apple Banana Kiwi
Jack 20 10 60
Jen 5 10 30
John 20 10 30
答案 2 :(得分:0)
使用字典操作get(key[, default])
,
# Let's say you return a name and a dict from your scirpt
name = 'John'
d = { "Apple": 10, "Mango": 20, "Banana":30}
# Add the record to a list of lists
lists = list()
lists.append([name, d.get('Apple', ''), d.get('Banana', ''), d.get('Mango', ''), d.get('Watermelon', '')])
# Write to a csv file
fieldnames = ['Name', 'Apple', 'Banana', 'Mango', 'Watermelon']
with open('result.csv', 'w') as f:
writer = csv.writer(f)
writer.writerow(fieldnames) # write the header
writer.writerows(lists) # write a list of lists