簡體   English   中英

python-列表以字符串形式從csv中讀取

[英]python - lists are being read in from csv as strings

我有一本字典,它使用字符串(編輯)作為鍵並將列表列表存儲為值。

dict = {key1: [[data1],[data2],[data3]], key2: [[data4],[data5]],...etc}

編輯:數據變量是包含從轉換后的熊貓DataFrame不同數據類型的行

防爆。

df = pd.DataFrame()
df['City'] = ['New York','Austin','New Orleans','New Orleans']
df['State'] = ['NY','TX','LA','LA']
df['Latitude'] = [29.12,23.53,34.53,34.53]
df['Time'] = [1.46420e+09,1.47340e+09,1.487820e+09,1.497820e+09]

City         State    Latitude   Time
New York     NY       29.12      1.46420e+09
Austin       TX       23.53      1.47340e+09
New Orleans  LA       34.53      1.487820e+09
New Orleans  LA       34.53      1.497820e+09

dict = {}
cities = df['City'].unique()
for c in cities:
    temp = df[df['City'] == c]
    dict[c] = temp.as_matrix().tolist()

#which outputs this for a given key
dict['New Orleans'] = [['New Orleans' 'LA' 34.53  1.487820e+09],
    ['New Orleans' 'LA' 34.53  1.497820e+09]]

我使用以下命令將其存儲為csv:

filename = 'storage.csv'
with open(filename,'w') as f:
    w = csv.writer(f)
    for key in dict.keys():
        w.writerow((key,dict[key]))

然后,我使用以下命令將文件讀回到字典中:

reader = csv.reader(open(filename, 'r'))
dict = {}
for key,val in reader:
    dict[key] = val

val看起來很完美,只是現在它是一個字符串。 例如,key1看起來像這樣:

dict[key1] = "[[data1],[data2],[data3]]"

如何讀取as列表中的值,或從val的讀取版本中刪除引號?

編輯:由於您使用的是pandas.DataFrame請不要使用csv模塊或json模塊。 而是使用pandas.io進行讀寫。


原始答案:

簡短的答案:使用json

CSV適用於保存字符串表。 除此之外,您還需要手動將字符串轉換回Python對象。

如果您的數據只有列表,那么字典和基本文字(如字符串和數字json將是此工作的正確工具。

鑒於:

example = {'x': [1, 2], 'y': [3, 4]}

保存到文件:

with open('f.txt','w') as f:
    json.dump(example, f)

從文件加載:

with open('f.txt') as f:
    reloaded_example = json.load(f)

您的代碼必須類似於:

import csv
import ast
#dict = {1: [[1],[2],[3]], 2: [[4],[5]]}
reader = csv.reader(open("storage.csv", 'r'))
dict = {}
for key,val in reader:
    dict[int(key)] = ast.literal_eval(val)
print dict

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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