我只是试图通过一个整数访问命名的Pandas列。可以使用df.ix[3]按位置选择行。但是如何通过整数选择列呢?我的 Dataframe :
df.ix[3]
df=pandas.DataFrame({'a':np.random.rand(5), 'b':np.random.rand(5)})
sxissh061#
我想到两种方法:
>>> df A B C D 0 0.424634 1.716633 0.282734 2.086944 1 -1.325816 2.056277 2.583704 -0.776403 2 1.457809 -0.407279 -1.560583 -1.316246 3 -0.757134 -1.321025 1.325853 -2.513373 4 1.366180 -1.265185 -2.184617 0.881514 >>> df.iloc[:, 2] 0 0.282734 1 2.583704 2 -1.560583 3 1.325853 4 -2.184617 Name: C >>> df[df.columns[2]] 0 0.282734 1 2.583704 2 -1.560583 3 1.325853 4 -2.184617 Name: C
编辑:最初的答案建议使用df.ix[:,2],但此函数现在已弃用。用户应切换到df.iloc[:,2]。
df.ix[:,2]
df.iloc[:,2]
nx7onnlm2#
您还可以使用df.icol(n)按整数访问列。更新:icol已弃用,相同的功能可通过以下方式实现:
df.icol(n)
icol
df.iloc[:, n] # to access the column at the nth position
0mkxixxg3#
您可以使用使用.loc的基于标签方法或使用.iloc的基于索引方法来执行列切片(包括列范围):
In [50]: import pandas as pd In [51]: import numpy as np In [52]: df = pd.DataFrame(np.random.rand(4,4), columns = list('abcd')) In [53]: df Out[53]: a b c d 0 0.806811 0.187630 0.978159 0.317261 1 0.738792 0.862661 0.580592 0.010177 2 0.224633 0.342579 0.214512 0.375147 3 0.875262 0.151867 0.071244 0.893735 In [54]: df.loc[:, ["a", "b", "d"]] ### Selective columns based slicing Out[54]: a b d 0 0.806811 0.187630 0.317261 1 0.738792 0.862661 0.010177 2 0.224633 0.342579 0.375147 3 0.875262 0.151867 0.893735 In [55]: df.loc[:, "a":"c"] ### Selective label based column ranges slicing Out[55]: a b c 0 0.806811 0.187630 0.978159 1 0.738792 0.862661 0.580592 2 0.224633 0.342579 0.214512 3 0.875262 0.151867 0.071244 In [56]: df.iloc[:, 0:3] ### Selective index based column ranges slicing Out[56]: a b c 0 0.806811 0.187630 0.978159 1 0.738792 0.862661 0.580592 2 0.224633 0.342579 0.214512 3 0.875262 0.151867 0.071244
hof1towb4#
您可以通过将列索引列表传递给dataFrame.ix来访问多个列。例如:
dataFrame.ix
>>> df = pandas.DataFrame({ 'a': np.random.rand(5), 'b': np.random.rand(5), 'c': np.random.rand(5), 'd': np.random.rand(5) }) >>> df a b c d 0 0.705718 0.414073 0.007040 0.889579 1 0.198005 0.520747 0.827818 0.366271 2 0.974552 0.667484 0.056246 0.524306 3 0.512126 0.775926 0.837896 0.955200 4 0.793203 0.686405 0.401596 0.544421 >>> df.ix[:,[1,3]] b d 0 0.414073 0.889579 1 0.520747 0.366271 2 0.667484 0.524306 3 0.775926 0.955200 4 0.686405 0.544421
pbgvytdp5#
方法.transpose()将列转换为行,将行转换为列,因此您甚至可以编写
df.transpose().ix[3]
uqxowvwt6#
大多数人已经回答了如何从索引开始选取列,但是可能有一些场景需要从中间或特定索引中选取列,这时可以使用下面的解决方案。假设您有A、B和C列,如果您只需要选择A和C列,则可以使用以下代码。
A
B
C
df = df.iloc[:, [0,2]]
其中0,2指定您只需要选择第1列和第3列。
0,2
jucafojl7#
可以使用take方法。例如,要选择第一列和最后一列:
take
df.take([0, -1], axis=1)
7条答案
按热度按时间sxissh061#
我想到两种方法:
编辑:最初的答案建议使用
df.ix[:,2]
,但此函数现在已弃用。用户应切换到df.iloc[:,2]
。nx7onnlm2#
您还可以使用
df.icol(n)
按整数访问列。更新:
icol
已弃用,相同的功能可通过以下方式实现:0mkxixxg3#
您可以使用使用.loc的基于标签方法或使用.iloc的基于索引方法来执行列切片(包括列范围):
hof1towb4#
您可以通过将列索引列表传递给
dataFrame.ix
来访问多个列。例如:
pbgvytdp5#
方法.transpose()将列转换为行,将行转换为列,因此您甚至可以编写
uqxowvwt6#
大多数人已经回答了如何从索引开始选取列,但是可能有一些场景需要从中间或特定索引中选取列,这时可以使用下面的解决方案。
假设您有
A
、B
和C
列,如果您只需要选择A
和C
列,则可以使用以下代码。其中
0,2
指定您只需要选择第1列和第3列。jucafojl7#
可以使用
take
方法。例如,要选择第一列和最后一列: