【发布时间】:2018-10-13 02:01:40
【问题描述】:
我有 >100 列的数据框。我正在尝试选择 0~32 和 #83 列。似乎 1 片适用于下面的代码。
df_new = df[df.columns[0:32]]
但它不适用于下面的 2 片代码。我该如何解决这个问题?
df_new = df[df.columns[0:32, 83]]
【问题讨论】:
我有 >100 列的数据框。我正在尝试选择 0~32 和 #83 列。似乎 1 片适用于下面的代码。
df_new = df[df.columns[0:32]]
但它不适用于下面的 2 片代码。我该如何解决这个问题?
df_new = df[df.columns[0:32, 83]]
【问题讨论】:
将np.r_ 索引器与iloc 结合使用,如下所示:
df.iloc[:, np.r_[0:32, 83]]
np.r_[0:32, 83]
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 83])
【讨论】:
df.iloc[:, np.r_[0, -3:]]。如果有人有使用np.r_ 的解决方案,那将是对这个答案的一个很好的补充。
c = df.shape[1]; df.iloc[:, np.r_[0, nc-3:nc]]
np.r_ 是一个很好的答案。另一种方法是使用列表和范围来构造它。
考虑这个例子:
import pandas as pd
df = pd.DataFrame([range(10)],range(10))
cols = list(range(0,5))+[8] # 0,1,2,3,4,8
df.iloc[:,cols]
【讨论】:
我也对这个问题感兴趣。我们可以选择几个单独的行或列。但似乎切片操作只能在每个轴上进行一次。像下面这样。
new_df=df.iloc[[2,3,4],[3:4]]
也许我们可以先切片,然后将它们连接在一起。
df1=df.iloc[[2:4],:]
df2=df.iloc[[8:10],:]
new_df=pd.concat([df1,df2],axis=0)
【讨论】: