要删除DataFrame中的列,我可以成功使用:
del df['column_name']
但为什么我不能使用以下选项?
del df.column_name
由于可以通过df.column_name访问该系列,所以我希望这能奏效。
要删除DataFrame中的列,我可以成功使用:
del df['column_name']
但为什么我不能使用以下选项?
del df.column_name
由于可以通过df.column_name访问该系列,所以我希望这能奏效。
当前回答
通过使用自动补全或“IntelliSense”而不是字符串文字来获得优势:
del df[df.column1.name]
# or
df.drop(df.column1.name, axis=1, inplace=True)
它适用于当前的Pandas版本。
其他回答
使用数据帧和切片的iloc函数删除列,当我们有一个带有不需要的值的典型列名时:
df = df.iloc[:,1:] # Removing an unnamed index column
这里0是默认行,1是第一列,因此:,1:是删除第一列的参数。
在Pandas DataFrame中删除列的另一种方法
如果您不希望就地删除,则可以通过使用DataFrame(…)函数指定列来创建一个新的DataFrame:
my_dict = { 'name' : ['a','b','c','d'], 'age' : [10,20,25,22], 'designation' : ['CEO', 'VP', 'MD', 'CEO']}
df = pd.DataFrame(my_dict)
创建新的DataFrame作为
newdf = pd.DataFrame(df, columns=['name', 'age'])
你得到的结果和del/drop一样好。
从Python的一般观点来看,如果可以删除属性column_name,del obj.column_name是有意义的。它需要是一个常规属性,或者是一个定义了删除器的属性。
这不适用于Pandas,也不适用于Pandas数据帧的原因如下:
考虑df.column_name是一个“虚拟属性”,它本身不是一个东西,它不是该列的“座位”,它只是访问该列的一种方式。很像没有删除器的属性。
点语法在JavaScript中有效,但在Python中无效。
Python:del df['column_name]JavaScript:del df['column_name]或del df.column_name
一个很好的补充是,只有列存在时才可以删除它们。这样,您可以覆盖更多的用例,并且它只会从传递给它的标签中删除现有列:
例如,只需添加errors='ignore':
df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
这是熊猫0.16.1以后的新版本。文档在这里。