Pandas read_csv使用相同的索引

时间:2017-01-03 18:35:09

标签: python pandas

请考虑以下代码:

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

1 个答案:

答案 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