将包含元素列表的csv文件读入pandas数据框。

7

I have a CSV file in the following format:

index      A      B      C
ind1    [1,2,3][3,4,5][6,7,8]
ind2    [1,4,3,4,8][9,1,2,1,4][3,7,3,5,9]
ind3    [2,8][1,8][1,5]

每个单元格(比如A,ind1)都有一个列表[1,2,3]。 当我将其导入到数据框中:

df=pd.read_csv('filename.csv')

我得到的数据框与csv格式相同,但是单元格中的列表被导入为字符串。
例如,如果我索引ind1列A的第一个元素,则df.iloc[0]['A']会给我'['而不是1。
基本上,它把[1,2,3]作为一个长字符串来读取,而不是作为一个列表来读取。
如何将所有单元格中的值转换为列表?

1
你已经非常清楚地描述了你的问题:你的数据文件不是CSV格式,因此read_csv不适合你。你需要研究如何按顺序读取列表。 - Prune
你已经打印出数据框了吗?我期望第一行数据应该有7个条目,用逗号表示,而不是一个单独的字符串。 - Prune
CSV文件是从另一个程序输出的,该程序使用“df.to_csv”将数据框转换为CSV格式。当我直接索引生成CSV的数据框时,我可以访问列表。但是,当我将其写成CSV并再次读取时,单个单元格被视为字符串而不是列表。 - kdba
让我猜猜:你正在使用 Pandas 数据框架?你必须使用与写出时相同(互补的)格式进行读取。如果你使用了 pandas 方法进行写入,那么你需要使用 pandas 方法进行读取。你使用了一个通用的 CSV 读取器 - 而文件并不是通用的 CSV。 - Prune
1个回答

6

有趣的问题。如果您将使用pandas,我会首先使用literal_eval对列表进行编码。

import pandas as pd from ast import literal_eval df = pd.read_csv("filename.csv")

然后,您可以使用pandas applymap将literal_eval函数应用于每个单元格。

df[['A', 'B', 'C']] = df[['A', 'B', 'C']].applymap(literal_eval)

现在,您已经提取了列表,并且可以像普通列表一样对它们进行操作。例如,这将从第一个列表中给出第一个元素:
df.iloc[0]['A'][0]

我希望这可以帮助到您。


你还可以这样做:import ast; df=pd.read_csv('filename.csv', converters={"A": ast.literal_eval}) - sound wave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接