[英]using multiple dictionaries to write a csv file in python
例如,我有两个字典:
dict1 = {1:[30], 2:[42]}
其中键是产品代码,值是平均销售额
dict2 = {"apple":1, "banana":2}
其中 key 是产品名称,values 是产品密钥。
我想写一个 CSV 文件,这样我就有:
产品名称 | 产品代码 | 平均销售额 |
---|---|---|
“苹果” | 1 | 30 |
“香蕉” | 2 | 42 |
解决这个问题的最佳方法是什么?
这是您可以做到的一种方式。 我相信也有更好的方法。
import pandas as pd
dict2 = {"apple": 1, "banana": 2}
dict1 = {1: [30], 2: [42]}
df = pd.DataFrame(list(dict1.items()), columns=['product code','average sales'])
df['average sales'] = df['average sales'].str[0] #removing the square brackets
df2 = pd.DataFrame(list(dict2.items()), columns=['product name','xx'])
df3 = pd.concat([df,df2],axis=1).iloc[:, 0:3] #taking only the first 3 columns
print(df3)
df3.to_csv('file.csv', index=False)
有几种方法可以正确地做到这一点。 我认为以下内容很有启发性,尤其是如果您对 Pandas 不太熟悉的话。
d1 = {1:[30], 2:[42]}
d2 = {"apple":1, "banana":2}
def get_key(d, val):
'''return key for any value'''
for k, v in d.items():
if val == v:
return k
return "key doesn't exist"
#Make a new dict containing all the columns you need
r = {'product name':[], 'product code':[], 'average sales':[]}
#Populate r
for k,v in d1.items():
r['product code'].append(k)
r['average sales'].append(*v) #* unpacks the list item
r['product name'].append(get_key(d2, k))
#Make a DataFrame and export it
import pandas as pd
df = pd.DataFrame(r)
df.to_csv('your_file.csv', index=False)
可以合并字典,然后转换成pandas dataframe,然后把dataframe写成Z32719B5675AFFEE584
import pandas as pd
dict1 = {1:[30], 2:[42]}
dict2 = {"apple":1, "banana":2}
#merge dict1 and dict2 into dict3:
dict3 = {k: [v, dict1[v][0]] for k, v in dict2.items()}
#create pandas dataframe from dict3 and transpose it.
df = pd.DataFrame(dict3).transpose()
#wite dataframe to csv file
df.to_csv("new_file.csv", header=None)
这是生成的 new_file.csv:
apple,1,30
banana,2,42
import csv
dict1 = {1:[30], 2:[42]}
dict2 = {"apple":1, "banana":2}
# Final array, will be written to csv
data = []
for name, code in dict2:
if code in dict:
avg_sales = dict1[code][0]
data += [name, code, avg_sales]
# else key doesn't exist
with open('myfile.csv', 'w', newline='') as file:
mywriter = csv.writer(file, delimiter=',')
mywriter.writerow(["Product Name", "Product Code", "Average Sales"]) # Headers
mywriter.writerows(data) # Data
顺便说一句,看起来你在 dict1 中的值是单个元素 arrays,所以我使用的是dict1[code][0]
。 如果您将其更改为仅 integer 值,它将只是dict1[code]
。
您可以遍历 dict2 的键,通过使用来构建每一行
pd.DataFrame({'product name': k, 'product code': dict2[k], 'average sales': dict1[dict2[k]]})
和 append 它逐行到df。 解决方案代码是
import pandas as pd
dict1 = {1:[30], 2:[42]}
dict2 = {"apple":1, "banana":2}
df = pd.DataFrame() #empty df
for k in dict2:
df = df.append(pd.DataFrame({'product name': k,
'product code': dict2[k],
'average sales': dict1[dict2[k]] }))
df.to_csv('my_file.csv', index=False)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.