BAC*_*C83 3 python indexing numpy dataframe pandas
我有一个大熊猫数据框(> 100列)。我需要删除各种列集,我希望有一种使用旧列的方法
df.drop(df.columns['slices'],axis=1)
Run Code Online (Sandbox Code Playgroud)
我建立了一些选择,例如:
a = df.columns[3:23]
b = df.colums[-6:]
Run Code Online (Sandbox Code Playgroud)
作为a并b代表我要删除的列集。
下列
list(df)[3:23]+list(df)[-6:]
Run Code Online (Sandbox Code Playgroud)
产生正确的选择,但我不能用实现它drop:
df.drop(df.columns[list(df)[3:23]+list(df)[-6:]],axis=1)
Run Code Online (Sandbox Code Playgroud)
ValueError:操作数不能与形状(20,)(6,)一起广播
我环顾四周,但找不到答案。
(以下与我收到的错误有关):
python numpy ValueError:操作数不能与形状一起广播
感觉好像他们遇到了类似的问题,但是“切片”并不是分开的: 根据Pandas中的列名删除多个列
干杯
您可以使用这个简单的解决方案:
cols = [3,7,10,12,14,16,18,20,22]
df.drop(df.columns[cols],axis=1,inplace=True)
Run Code Online (Sandbox Code Playgroud)
结果 :
0 1 2 4 5 6 8 9 11 13 15 17 19 21
0 3 12 10 3 2 1 7 512 64 1024.0 -1.0 -1.0 -1.0 -1.0
1 5 12 10 3 2 1 7 16 2 32.0 32.0 1024.0 -1.0 -1.0
2 5 12 10 3 2 1 7 512 2 32.0 32.0 32.0 -1.0 -1.0
3 5 12 10 3 2 1 7 16 1 32.0 64.0 1024.0 -1.0 -1.0
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,具有给定索引的列已全部删除。
如果我们假设您有 A、B、C ...等,您可以用数组中的列名称替换 int 值,您可以像这样替换 int 值,cols例如:
cols = ['A','B','C','F']
Run Code Online (Sandbox Code Playgroud)
您可以np.r_用来无缝组合多个范围/切片:
from string import ascii_uppercase
df = pd.DataFrame(columns=list(ascii_uppercase))
idx = np.r_[3:10, -5:0]
print(idx)
array([ 3, 4, 5, 6, 7, 8, 9, -5, -4, -3, -2, -1])
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用idx索引您的列并提要到pd.DataFrame.drop:
df.drop(df.columns[idx], axis=1, inplace=True)
print(df.columns)
Index(['A', 'B', 'C', 'K', 'L', 'M', 'N',
'O','P', 'Q', 'R', 'S', 'T', 'U'], dtype='object')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6678 次 |
| 最近记录: |