使用字典更新pandas数据帧或csv

时间:2017-05-05 14:11:50

标签: python csv dictionary

我的脚本中的函数返回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

3 个答案:

答案 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