簡體   English   中英

將數據從 Python 列表和字典寫入 CSV

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

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