python - 读取 csv 文件中重复的列名

标签 python pandas csv dataframe

我有一个包含许多列的文件,需要使用 pandas 读取其中一些列。问题是我需要的列中有重复的名称。在这种情况下,参数mangle_dupe_cols似乎不起作用。它只返回我要求的列的第一次出现。


示例

import pandas as pd
from io import StringIO

csv = r'''a;b;c;d;c;d;e;f
1;11;21;31;41;51;61;71
2;12;22;32;42;52;62;72
3;13;23;33;43;53;63;73
4;14;24;34;44;54;64;74
5;15;25;35;45;55;65;75'''

如果我读取整个文件,而不指定要读取的列,我会得到预期的答案:

df = pd.read_csv( StringIO(csv), 
        sep=';', header=0)

print( df )

   a   b   c   d  c.1  d.1   e   f
0  1  11  21  31   41   51  61  71
1  2  12  22  32   42   52  62  72
2  3  13  23  33   43   53  63  73
3  4  14  24  34   44   54  64  74
4  5  15  25  35   45   55  65  75

但是,我只想指定一些列,如下所示:

df = pd.read_csv( StringIO(csv), 
        usecols=[ 'b', 'c', 'd', 'c', 'd',], 
        sep=';', header=0)

print( df )

...在这种情况下,我只能得到第一次出现的重复列:

    b   c   d
0  11  21  31
1  12  22  32
2  13  23  33
3  14  24  34
4  15  25  35

我想避免阅读整个文件,查找列并删除不需要的列,因为文件有点大。

是否可以使用pandas.read_csv()指定列并获取重复的列?

如果有任何提示,我将非常感激!


使用python 3.7.5pandas 0.25.0

最佳答案

尝试使用这个:

In [40]:

df = pd.read_csv('tmp.csv', index_col=0)
df
Out[44]:
a   b   a.1
0   4   2   1
1   5   3   2
2   6   4   3
In [41]:

df = pd.read_csv('tmp.csv', index_col=0, nrows=0)
# read only column names
In [42]:

df
Out[42]:
a   b   a.1
In [36]:

use_col = [col_name for col_name in list(df.columns) if col_name.startswith('a')]
# check how many columns we have and save them to the separate list
In [39]:

df = pd.read_csv('tmp.csv', usecols=use_col)
In [40]:

df
Out[40]:
a   a.1
0   4   1
1   5   2
2   6   3
In [ ]:

关于python - 读取 csv 文件中重复的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59935835/

相关文章:

python - 密码学:将 C 函数转换为 python

python - 如何在多重索引中排序和添加排名列?

python - 将多个列表写入单个列

python - Numpy 选择沿轴有条件的元素

python - 使用 matplotlib 测试事件处理和选择

python - 迭代多个查询并将其存储在 pyspark 数据框中

javascript - 从 csv 文件读取图像的分页

java - 如何从 CSV 文件中读取可读内容?

python - 如何使用嵌入在 PyQt GUI 中的终端

python-Pandas df.sum() 跨多列意外 arg 'axis' 错误