使用熊猫在csv导入上删除没有标题的列

时间:2019-03-21 21:59:30

标签: python pandas csv

这是一个示例csv:

|  Header A |      | Unnamed: 1 |  Header D |
|-----------|------|------------|-----------|
| a1        | b1   | c1         | d1        |
| a2        | b2   | c2         | d2        |

如果我使用pandas.read_csv导入它,它将变成这样:

  Header A Unnamed: 1 Unnamed: 1.1 Header D
0      a1         b1           c1       d1
1      a2         b2           c2       d2

我的目标是删除所有标头为空的列,在本例中为第二列,但是我无法使用熊猫分配的列名来过滤它们,因为可能还有以{{1}开头的非空列},如示例中的第三列。

列是未知的,因此我无法对其进行任何控制。

我用Unnamed尝试了以下args,但是没有运气:

  • read_csv:它根本不起作用!
  • prefix:将空标头传递给usecols时已经有了一个名称,这使它对我不可用。

我已经查看了SO的其他一些答案,例如以下答案,但没有一个涵盖我的情况:

How to get rid of `Unnamed:` column in a pandas dataframe

Remove Unnamed columns in pandas dataframe

2 个答案:

答案 0 :(得分:2)

我能想到的唯一方法是事先“窥视”标头并获取非空标头的索引。那么就不是删除它们的情况,而是不将它们包括在原始df中。

import csv

import pandas as pd

with open('test.csv') as infile:
    reader = csv.reader(infile)
    headers = next(reader)

header_indices = [i for i, item in enumerate(headers) if item]

df = pd.read_csv('test.csv', usecols=header_indices)

答案 1 :(得分:0)

  1. 阅读您的列以使用df.columns列出
  2. 根据您的逻辑(搜索“无”,“未命名”等),使用“真/假”创建tf_list
  3. filter_df = df.loc [:, tf_list]