我有一个包含许多列的文件,需要使用 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.5
,pandas 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/