python - 列表正在作为字符串从 csv 中读取
python - lists are being read in from csv as strings
我有一个字典,它使用字符串(编辑)作为键并将列表的列表存储为值。
dict = {key1: [[data1],[data2],[data3]], key2: [[data4],[data5]],...etc}
编辑:其中数据变量是包含来自转换的 pandas 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]]"
如何读取列表中的值,或从 val 的读入版本中删除引号?
您的代码必须像:
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
编辑: 因为您使用的是 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)
我有一个字典,它使用字符串(编辑)作为键并将列表的列表存储为值。
dict = {key1: [[data1],[data2],[data3]], key2: [[data4],[data5]],...etc}
编辑:其中数据变量是包含来自转换的 pandas 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]]"
如何读取列表中的值,或从 val 的读入版本中删除引号?
您的代码必须像:
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
编辑: 因为您使用的是 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)