微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用pandas将csv列作为dtype列表读取?

我有一个包含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 lib:

from ast import literal_eval


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

您也可以使用转换器从csv创建数据框时执行此操作:

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

如果您确定所有字符串的格式相同,则剥离和拆分将更快:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐