python - 如何使用 pandas 将一列 csv 读取为 dtype 列表?

标签 python csv pandas

我有一个包含 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 对象而不是列表。我试图将该列的 dtype 更改为列出,但得到“属性错误”,如下所示

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: 无法设置属性

如果你能指导我如何去做,那就太好了。

最佳答案

你可以使用 ast 库:

from ast import literal_eval


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

您也可以在从 csv 创建数据帧时使用 converters:

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

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

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

但你最终会得到用引号括起来的字符串

关于python - 如何使用 pandas 将一列 csv 读取为 dtype 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32742976/

相关文章:

python - 如何一次向现有数据框添加多列?

python - 为什么标记数据时出现错误。 C错误: out of memory in my panda script

python - 如何将拍摄的文档更改为 "Scanned"

ios - 将 .csv 文件解析为 UITextView 时出错

python - 使用 Python 将多个列从 csv 文件复制到现有 xls 文件

php - 为什么导入 CSV 文件时会添加额外的空行?

python - 如何迭代数据框列表并在未找到特定字符串时删除所有数据

python - 在 Pandas 中使用 ELIF 创建列

Python、Sqlite3 - 如何将列表转换为 BLOB 单元格

python - Jupyter Notebook - 如何使用数据文件进行代码