【问题标题】:Python - read lists in a csv [duplicate]Python - 读取csv中的列表[重复]
【发布时间】:2015-01-09 04:41:19
【问题描述】:

我有一个问题,我无法读取包含由浮动列表组成的列的 CSV 文件。 这是我用来保存 CSV 的方法。 data 是一个元组列表。

df = pandas.DataFrame(data, columns=['ColA', 'ColB'])
df.to_csv(FILE, index=False, header=True)

这样我在输出中得到以下文件,这很好。

ColA,ColB
"[1.5,2.5,3.5]",9
"[4.5,5.5,6.5]",9
"[3.5,1.5,8.5]",9

现在,当我尝试以这种方式加载文件时

df = pandas.read_csv(FILE)
mylist = []
for x in xrange(len(df['ColA'])):
    mylist.append(df['ColA'][x])

我得到的是字符串列表而不是列表列表。我做错了什么?

编辑: 我不认为逗号是一个问题。看看这段代码。

import pandas
FILE = 'file.csv'

listA = [[1.1, 1.2, 1.3], [2.1, 2.2, 2.3], [3.1, 3.2, 3.3]]
listB = [9.1, 9.2, 9.3]

data = map(lambda x, y: (x, y), listA, listB)
df = pandas.DataFrame(data, columns=['ColA', 'ColB'])
df.to_csv(FILE, index=False, header=True)

df = pandas.read_csv(FILE)
print df['ColA'][0], df['ColA'][0][0]

输出是[1.1, 1.2, 1.3] [ 而不是1.1

【问题讨论】:

  • 您保存了一个字符串“[1.5,2.5,3.5]”。所以你得到一个字符串:)。您可以使用 eval(""[1.5,2.5,3.5]""),但我听说这是不好的做法。
  • 我猜这是错误,但我传递的是一个列表而不是字符串。我应该以某种方式指定类型吗?
  • 我不确定 csv 是否有一个映射到 python 列表的列表概念。您可以使用",".join(your_list) 将列表写为字符串(真正的字符串,而不是str(list) 的形式)并使用retrieved_string.split(',') 将其取回,但您可能永远不会在其中包含任何包含逗号的内容该列表,因为它会破坏映射。如果没问题 - 这是一个很好的解决方案。你有考虑过使用我们的救世主 JSON 吗?
  • 是的,这可能是一个解决方案,因为它是一个浮点数列表。谢谢。

标签: python list csv pandas


【解决方案1】:

如果您只需要知道如何从字符串到列表和字符串到数字,请参阅这篇文章 How to turn a 'string list' into a real list?https://docs.python.org/3/library/functions.html#float 上的 Python 文档

【讨论】:

  • 我在第一篇文章中回复了你。但是,您链接的主题可能很有用。
  • 我明白了,现在很清楚了。您确实需要查看我链接到的问题。你得到[ 而不是1.1 的原因是[ 是字符串中的第一个字符。这基本上就是您通过df['ColA'][0][0] 所要求的
  • 我做到了,事实上我通过循环执行 ast.literal_eval(df['ColA'][x] 解决了。谢谢。
【解决方案2】:

我不知道 CSV 是否有列表等复杂对象的概念。鉴于您只使用浮点数,您可以使用 ",".join(your_list) 将列表映射到字符串。

映射回表示列表的存储字符串就像retrieved_string.split(',') 一样简单。

您可能需要考虑一种支持列表的格式,例如 JSON,这在使用 python 时也更友好(根据我的经验)。

【讨论】:

    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 2013-01-21
    • 2021-01-12
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多