请考虑以下代码:
import pandas as pd
from StringIO import StringIO
x='''
a,b,c,d
1,2,3,4
5,6,7,8
9,10,11,12
13,14,15,16
17,18,19,20
'''
df = pd.read_csv(StringIO(x), skipinitialspace=True, usecols=[2,3,2])
print df
输出:
c d 0 3 4 1 7 8 2 11 12 3 15 16 4 19 20
有什么办法可以获得
c d c 0 3 4 3 1 7 8 7 2 11 12 11 3 15 16 15 4 19 20 19
答案 0 :(得分:4)
您可以使用iloc[]索引器:
In [67]: pd.read_csv(StringIO(x), skipinitialspace=True).iloc[:, [2,3,2]]
Out[67]:
c d c
0 3 4 3
1 7 8 7
2 11 12 11
3 15 16 15
4 19 20 19
但是作为@Boud has already mentioned in comments,使用usecols
参数会更有效率(因为我们不需要解析我们不需要的列,因此我们不会浪费内存如果您知道CSV文件中列的任何名称:
In [6]: pd.read_csv(StringIO(x), skipinitialspace=True, usecols=[2,3,2]).loc[:, ['c','d','c']]
Out[6]:
c d c
0 3 4 3
1 7 8 7
2 11 12 11
3 15 16 15
4 19 20 19
或者如果你知道他们的新索引(在新的DataFrame中):
In [7]: pd.read_csv(StringIO(x), skipinitialspace=True, usecols=[2,3,2]).iloc[:, [0,1,0]]
Out[7]:
c d c
0 3 4 3
1 7 8 7
2 11 12 11
3 15 16 15
4 19 20 19
PS您可能还想阅读Pandas boolean indexing