[英]Writing data from a Python List and a Dictionary to CSV
假設mydict
基於每個列表項是唯一的:
mylist = ['li1', 'li2']
mydict = {'key1': 'value1','key2': 'value2','key3': 'value3}
我想把這個結構寫在CSV
文件中:
ListItem, key1, key2, key3
li1, value1, value2, value3
li2, value1, value2, value3
這是我如何嘗試執行此操作的示例; 但是我的代碼每次迭代都會覆蓋第一行,而且我不知道如何在第一列中編寫列表項。 你能幫我一下嗎?
import pandas as pd
import random
def CreateDict(li):
dict = {}
dict['x'] = random.randrange(1, li) #25
dict['y'] = random.randrange(1, li) #27
print(dict)
return dict
mylist = [10, 20, 30]
for li in mylist:
mydict = CreateDict(li)
df = pd.DataFrame([mydict])
df.to_csv('test.csv', index=False)
我得到的是 output:
x,y
25,27
讓我們試試dict.fromkeys
生成數據字典,然后從這個data
字典創建一個 dataframe 並使用DataFrame.to_csv
保存為csv
文件:
data = dict.fromkeys(mylist, mydict)
pd.DataFrame(data).T.rename_axis('ListItem').to_csv('foo.csv')
編輯:如果您想為mylist
中的每個項目創建唯一的字典,您可以使用:
data = {li:CreateDict(li) for li in mylist}
pd.DataFrame(data).T.rename_axis('ListItem').to_csv('foo.csv')
# foo.csv
ListItem,key1,key2,key3
li1,value1,value2,value3
li2,value1,value2,value3
使用您現有的解決方案:
import pandas as pd
import random
def CreateDict(li):
dict = {}
dict['x'] = random.randrange(1, li) #25
dict['y'] = random.randrange(1, li) #27
print(dict)
return dict
mylist = [10, 20, 30]
df=pd.DataFrame(columns=['x', 'y'])
for li in mylist:
mydict = CreateDict(li)
df=pd.concat([df, pd.DataFrame([mydict])])
df['mylist']=mylist
result=df[['mylist', 'x', 'y']]
result.to_csv('test.csv', index=False)
Output:
mylist x y
10 6 3
20 8 2
30 7 4
首先你應該在 function 之外創建一個字典,在循環中添加項目並且只在最后寫入。 使用您的代碼,您正在編寫同一個文件的 3 次,並且您只看到最后一行。
對於索引,您應該設置 index=True。
這是代碼。 希望我能幫到你!
import pandas as pd
import random
my_dict = {
'key1':[],
'key2':[],
'key3':[]
}
def AddToDict(li):
my_dict['key1'].append(random.randrange(1, li))
my_dict['key2'].append(random.randrange(1, li))
my_dict['key3'].append(random.randrange(1, li))
mylist = [10, 20, 30]
for li in mylist:
AddToDict(li)
df = pd.DataFrame(my_dict) # Here
df.to_csv('test.csv', index=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.