如何使用pandas读取csv as dtype list列?

2024-06-01 12:09:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含3列的csv文件,其中第3列的每一行都有值列表。从下表结构可以看出

Col1,Col2,Col3
1,a1,"['Proj1', 'Proj2']"
2,a2,"['Proj3', 'Proj2']"
3,a3,"['Proj4', 'Proj1']"
4,a4,"['Proj3', 'Proj4']"
5,a5,"['Proj5', 'Proj2']"

每当我试图读取这个csv时,Col3被读取为str对象而不是list。我试图将该列的数据类型改为list,但得到如下“Attribute Error”

df = pd.read_csv("inputfile.csv")
df.Col3.dtype = list

AttributeError                            Traceback (most recent call last)
<ipython-input-19-6f9ec76b1b30> in <module>()
----> 1 df.Col3.dtype = list

C:\Python27\lib\site-packages\pandas\core\generic.pyc in __setattr__(self,         name, value)
   1953                     object.__setattr__(self, name, value)
   1954             except (AttributeError, TypeError):
-> 1955                 object.__setattr__(self, name, value)
   1956 
   1957     #----------------------------------------------------------------------

AttributeError:无法设置属性

如果你能指导我怎么做,那就太好了。


Tags: csvnameinselfdfvaluelistcol3
3条回答

添加替换到Cunninghams答案:

df = pd.read_csv("in.csv",converters={"Col3": lambda x: x.strip("[]").replace("'","").split(", ")})

另见pandas - convert string into list of strings

我对此有不同的方法,除了列表之外,还可以用于其他数据类型的字符串表示。

您可以使用json库并将json.loads()应用于所需的列。e、 克

import json
df.my_column = df.my_column.apply(json.loads)

但是,要使其工作,您的输入字符串必须用双引号括起来。

您可以使用ast库:

from ast import literal_eval


df.Col3 = df.Col3.apply(literal_eval)
print(df.Col3[0][0])
Proj1

也可以在使用converters从csv创建数据帧时执行此操作:

df = pd.read_csv("in.csv",converters={"Col3": literal_eval})

如果您确定所有字符串的格式都相同,那么剥离和拆分将快得多:

 df = pd.read_csv("in.csv",converters={"Col3": lambda x: x.strip("[]").split(", ")})

但最后你会用引号把字符串括起来

相关问题 更多 >