使用Pandas处理可变数量的列 – Python

我有一个看起来像这样的数据集(最多5列 – 但可以更less)

1,2,3 1,2,3,4 1,2,3,4,5 1,2 1,2,3,4 .... 

我正在尝试使用pandasread_table将其读入5列数据框。 我想阅读这个在没有额外的按摩。

如果我尝试

 import pandas as pd my_cols=['A','B','C','D','E'] my_df=pd.read_table(path,sep=',',header=None,names=my_cols) 

我得到一个错误 – “列名有5个字段,数据有3个字段”。

在读取数据的同时,有没有办法让pandas填补NaN中缺失的列?

似乎有效的方法之一(至less在0.10.1和0.11.0.dev-fc8de6d):

 >>> !cat ragged.csv 1,2,3 1,2,3,4 1,2,3,4,5 1,2 1,2,3,4 >>> my_cols = ["A", "B", "C", "D", "E"] >>> pd.read_csv("ragged.csv", names=my_cols, engine='python') ABCDE 0 1 2 3 NaN NaN 1 1 2 3 4 NaN 2 1 2 3 4 5 3 1 2 NaN NaN NaN 4 1 2 3 4 NaN 

请注意,这种方法要求您为所需的列提供名称。 不如一般其他方式一般,但适用时运作良好。

我也有兴趣知道这是否可能,从文件看,似乎并非如此。 你可能做的是逐行读取文件,并将每个读数连接到一个DataFrame:

 import pandas as pd df = pd.DataFrame() with open(filepath, 'r') as f: for line in f: df = pd.concat( [df, pd.DataFrame([tuple(line.strip().split(','))])], ignore_index=True ) 

它的作品,但不是在最优雅的方式,我猜…

好。 不知道这是多么有效 – 但这是我所做的。 很想听听有没有更好的方法来做到这一点。 谢谢 !

 from pandas import DataFrame list_of_dicts=[] labels=['A','B','C','D','E'] for line in file: line=line.rstrip('\n') list_of_dicts.append(dict(zip(labels,line.split(',')))) frame=DataFrame(list_of_dicts)