熊猫:处理丢失的列

时间:2017-08-02 14:44:17

标签: python pandas csv

我正在使用以下代码使用pandas read_csv

以块的形式读取CSV文件
headers = ["1","2","3","4","5"]
fields = ["1", "5"]

for chunk in pandas.read_csv(fileName, names=headers, header=0, usecols=fields, chunksize=chunkSize):

有时我的CSV不会有“5”列,我希望能够处理这种情况并指定一些默认值。有没有办法只读取我的CSV文件的标题而不读取整个文件,所以我可以手动处理这个?或者可能是任何其他聪明的方法来默认缺失列的值?

1 个答案:

答案 0 :(得分:3)

如果您通过nrows=0这只会读取列行,则可以调用intersection来查找公共列值并避免任何错误:

In[14]:
t="""1,2,3,5,6
0,1,2,3,4"""
headers = ["1","2","3","4","5"]
fields = ["1", "5"]
cols = pd.read_csv(io.StringIO(t), nrows=0).columns
cols

Out[14]: Index(['1', '2', '3', '5', '6'], dtype='object')

现在我们有列名称,我们可以调用intersection来查找针对您的预期列和实际列的有效列:

In[15]:
valid_cols = cols.intersection(headers)
valid_cols

Out[15]: Index(['1', '2', '3', '5'], dtype='object')

您可以对fields执行相同操作,然后将这些内容传递给当前代码以避免任何异常

只是为了证明传递nrows=0只是读取标题行:

In[16]:
pd.read_csv(io.StringIO(t), nrows=0)

Out[16]: 
Empty DataFrame
Columns: [1, 2, 3, 5, 6]
Index: []