pandas 使用 iloc 从数据框中切片多个列范围

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/45985877/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 04:22:13  来源:igfitidea点击:

Slicing multiple column ranges from a dataframe using iloc

pythonpandasdataframeindexing

提问by novicebioinforesearcher

I have a df with 32 columns

我有一个 32 列的 df

df.shape
(568285, 32)

I am trying to rearrange the columns in a specific way, and drop the first column using iloc

我试图以特定方式重新排列列,并使用 iloc 删除第一列

 df = df.iloc[:,[31,[1:23],24,25,26,28,27,29,30]]
                         ^
SyntaxError: invalid syntax

is this the right way to do it?

这是正确的方法吗?

回答by cs95

You could use the np.r_indexer.

您可以使用np.r_索引器。

class RClass(AxisConcatenator)
 |  Translates slice objects to concatenation along the first axis.
 |  
 |  This is a simple way to build up arrays quickly. There are two use cases.
class RClass(AxisConcatenator)
 |  Translates slice objects to concatenation along the first axis.
 |  
 |  This is a simple way to build up arrays quickly. There are two use cases.


df = df.iloc[:, np.r_[31, 1:23, 24, 25, 26, 28, 27, 29, 30]]


df

     0     1     2     3     4     5     6     7     8     9   ...     40  \
A  33.0  44.0  68.0  31.0   NaN  87.0  66.0   NaN  72.0  33.0  ...   71.0   
B   NaN   NaN  77.0  98.0   NaN  48.0  91.0  43.0   NaN  89.0  ...   38.0   
C  45.0  55.0   NaN  72.0  61.0  87.0   NaN  99.0  96.0  75.0  ...   83.0   
D   NaN   NaN   NaN  58.0   NaN  97.0  64.0  49.0  52.0  45.0  ...   63.0   

     41    42    43    44    45    46    47    48    49  
A   NaN  87.0  31.0  50.0  48.0  73.0   NaN   NaN  81.0  
B  79.0  47.0  51.0  99.0  59.0   NaN  72.0  48.0   NaN  
C  93.0   NaN  95.0  97.0  52.0  99.0  71.0  53.0  69.0  
D   NaN  41.0   NaN   NaN  55.0  90.0   NaN   NaN  92.0

out = df.iloc[:, np.r_[31, 1:23, 24, 25, 26, 28, 27, 29, 30]]
out 
     31    1     2     3     4     5     6     7     8     9   ...     20  \
A  99.0  44.0  68.0  31.0   NaN  87.0  66.0   NaN  72.0  33.0  ...   66.0   
B  42.0   NaN  77.0  98.0   NaN  48.0  91.0  43.0   NaN  89.0  ...    NaN   
C  77.0  55.0   NaN  72.0  61.0  87.0   NaN  99.0  96.0  75.0  ...   76.0   
D  95.0   NaN   NaN  58.0   NaN  97.0  64.0  49.0  52.0  45.0  ...   71.0   

     21    22    24    25    26    28    27    29    30  
A   NaN  40.0  66.0  87.0  97.0  68.0   NaN  68.0   NaN  
B  95.0   NaN  47.0  79.0  47.0   NaN  83.0  81.0  57.0  
C   NaN  75.0  46.0  84.0   NaN  50.0  41.0  38.0  52.0  
D   NaN  74.0  41.0  55.0  60.0   NaN   NaN  84.0   NaN