给出从csv解析的一些数组,如下所示(不必担心解析部分,只需将此数组视为起点)即可。
说:
['name,age,city', 'tom,12,new york','john, 10, los angeles']
第一个索引就是列名,将其转换为表的最佳方法是什么。我当时正在考虑使用numpy和pandas创建一个数据框,但是转换为做到这一点的最节省内存/时间最有效的方法是什么?然后,我计划进行一些数据分析并创建一些新功能。我可以使用标准python库中的某些东西,还是熊猫是实现此目的的最佳方法?如果我仅使用内置函数,该如何处理?最后,我需要将这些功能组合回数组的原始形式。
谢谢您的指导。
答案 0 :(得分:4)
仅适用于附件(用于打印的pprint
除外)
import pprint
data = [
"name,age,city",
"tom,12,new york",
"john, 10, los angeles",
]
cols = None
out_data = []
for line in data:
line = line.split(",")
# We don't know the columns yet; must be the first line
if not cols:
cols = line
continue
out_data.append(dict(zip(cols, line)))
pprint.pprint(out_data)
使用csv
标准模块:
import csv
import io
import pprint
data = [
"name,age,city",
"tom,12,new york",
"john, 10, los angeles",
]
reader = csv.DictReader(io.StringIO('\n'.join(data)))
out_data = list(reader)
pprint.pprint(out_data)
两种方法都输出预期的结果:
[{'age': '12', 'city': 'new york', 'name': 'tom'},
{'age': ' 10', 'city': ' los angeles', 'name': 'john'}]
答案 1 :(得分:2)
熊猫是必经之路。您不需要解析值。相反,您可以仅使用read_csv功能从CSV文件中创建数据框,然后在该框上进行特征生成/提取或数据清理。 Python标准库不/不应该提供这种功能。
要在一天结束时使用Python列表收集值,请使用df.values.tolist()
。
pandas
在关键部分包含C代码,这使其速度提高了几个数量级。
答案 2 :(得分:1)
我不能为了提高效率而说话,但是就熊猫而言,将其转换为表格的简单方法是最好的选择。我会用pandas.read_csv。