在Python和Pandas中读入.csv的一种非常通用的方法是什么?
我有一个.csv文件,其中的行具有多列长度。
import pandas as pd
df = pd.read_csv(infile, header=None)
返回
ParserError: Error tokenizing data. C error: Expected 6 fields in line 8, saw 8
错误。我知道我可以使用
names=my_cols
read_csv调用中的选项,但是肯定有比这更“ pythonic”的东西了吗?另外,这不是重复的问题,因为
error_bad_lines=False
导致跳过行(这是不希望的)。.csv看起来像:
Anne,Beth,Caroline,Ernie,Frank,Hannah
Beth,Caroline,David,Ernie
Caroline,Hannah
David,,Anne,Beth,Caroline,Ernie
Ernie,Anne,Beth,Frank,George
Frank,Anne,Caroline,Hannah
George,
Hannah,Anne,Beth,Caroline,David,Ernie,Frank,George
-
好的,这个问题在一定程度上受到了启发:将可变数目的列转换为二进制矩阵
因此,请阅读csv,但将分隔符覆盖到选项卡上,这样它就不会尝试拆分名称:
In[7]: import pandas as pd import io t="""Anne,Beth,Caroline,Ernie,Frank,Hannah Beth,Caroline,David,Ernie Caroline,Hannah David,,Anne,Beth,Caroline,Ernie Ernie,Anne,Beth,Frank,George Frank,Anne,Caroline,Hannah George, Hannah,Anne,Beth,Caroline,David,Ernie,Frank,George""" df = pd.read_csv(io.StringIO(t), sep='\t', header=None) df Out[7]: 0 0 Anne,Beth,Caroline,Ernie,Frank,Hannah 1 Beth,Caroline,David,Ernie 2 Caroline,Hannah 3 David,,Anne,Beth,Caroline,Ernie 4 Ernie,Anne,Beth,Frank,George 5 Frank,Anne,Caroline,Hannah 6 George, 7 Hannah,Anne,Beth,Caroline,David,Ernie,Frank,Ge...
现在
str.split
,我们可以使用withexpand=True
将名称扩展到自己的列中:In[8]: df[0].str.split(',', expand=True) Out[8]: 0 1 2 3 4 5 6 7 0 Anne Beth Caroline Ernie Frank Hannah None None 1 Beth Caroline David Ernie None None None None 2 Caroline Hannah None None None None None None 3 David Anne Beth Caroline Ernie None None 4 Ernie Anne Beth Frank George None None None 5 Frank Anne Caroline Hannah None None None None 6 George None None None None None None 7 Hannah Anne Beth Caroline David Ernie Frank George
因此,为了清楚起见,将您的
read_csv
行修改为此:df = pd.read_csv(infile, header=None, sep='\t')
然后做
str.split
上面的