我知道去掉一列要用df。Drop ('column name', axis=1)。是否有一种方法可以使用数字索引而不是列名来删除列?
当前回答
获得你想要的列的好方法(没有问题重复的名称)。
例如,您希望删除的列索引包含在类似列表的变量中
unnecessary_cols = [1, 4, 5, 6]
then
import numpy as np
df.iloc[:, np.setdiff1d(np.arange(len(df.columns)), unnecessary_cols)]
其他回答
像这样删除多个列:
cols = [1,2,4,5,12]
df.drop(df.columns[cols],axis=1,inplace=True)
inplace=True用于在数据帧本身中进行更改,而不需要在数据帧的副本上进行列删除。如需保留原稿,请使用:
df_after_dropping = df.drop(df.columns[cols],axis=1)
您需要根据列在数据框架中的位置来标识它们。例如,如果你想删除(del)列2、3和5,它将是,
df.drop(df.columns[[2,3,5]], axis = 1)
如果您真的想处理整数(为什么?),那么您可以构建一个字典。
col_dict = {x: col for x, col in enumerate(df.columns)}
那么df = df。Drop (col_dict[0], 1)将按预期工作
编辑:你可以把它放在一个为你做这件事的函数中,尽管这样它会在你每次调用它的时候创建字典
def drop_col_n(df, col_n_to_drop):
col_dict = {x: col for x, col in enumerate(df.columns)}
return df.drop(col_dict[col_n_to_drop], 1)
df = drop_col_n(df, 2)
感谢我很晚才参加派对,但我也有同样的问题,一个DataFrame有一个MultiIndex。Pandas真的不喜欢非唯一的多索引,在某种程度上,上面的大多数解决方案在这种设置下都不起作用(例如,.drop函数只会错误地带有ValueError:不能处理非唯一的多索引!)
我得到的解决方案是使用.iloc代替。根据文档,use可以使用带有掩码的iloc(=你想保留的列的True/False值列表):
使用长度与列匹配的布尔数组。 df。iloc[:,[正确,错误,正确,错误]]
结合df.columns. duplication()来识别重复的列,你可以以一种高效的、panda -native的方式做到这一点:
df = df.iloc[:, ~df.columns.duplicated()]
获得你想要的列的好方法(没有问题重复的名称)。
例如,您希望删除的列索引包含在类似列表的变量中
unnecessary_cols = [1, 4, 5, 6]
then
import numpy as np
df.iloc[:, np.setdiff1d(np.arange(len(df.columns)), unnecessary_cols)]
推荐文章
- Python dataframe pandas使用int删除列
- 使用os.walk()在Python中递归遍历目录
- 在Python中,什么时候“i += x”与“i = i + x”不同?
- Python Flask,如何设置内容类型
- 删除字符串中的字符列表
- 当你的应用程序有一个tests目录时,在Django中运行一个特定的测试用例
- 如何合并一个透明的png图像与另一个图像使用PIL
- 使用散射数据集生成热图
- python:将脚本工作目录更改为脚本自己的目录
- 如何以编程方式获取python.exe位置?
- 如何跳过循环中的迭代?
- 使用Pandas为字符串列中的每个值添加字符串前缀
- ImportError:没有名为matplotlib.pyplot的模块
- 在python中遍历对象属性
- 如何在Python中使用方法重载?