使用pandas删除csv导入时没有标题的列

问题描述 投票:0回答:2

这是一个示例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

我的目标是删除所有带有空标题的列,在本例中是第二列,但我不能使用pandas指定的列名来过滤它们,因为可能还有非空列以Unnamed开头,就像第三列一样这个例子。

列之前是未知的,所以我无法控制它们。

我用read_csv尝试了下面的args,但是没有运气呢:

  • prefix:它只是不起作用!
  • usecols:空标题在传递给usecols时已经有了一个名字,这使我无法使用它。

我已经在SO上查看了其他一些答案,如下所示,但没有一个涵盖我的案例:

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

Remove Unnamed columns in pandas dataframe

python pandas csv
2个回答
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)

0
投票
  1. 使用df.columns读取要列出的列
  2. 根据您的逻辑创建一个带有True / False的tf_list(搜索None,Unnamed等)
  3. filter_df = df.loc [:,tf_list]
© www.soinside.com 2019 - 2024. All rights reserved.