如果未在熊猫的特定列表中显示列,如何删除列

mgn*_*nt2 1 pandas

我有一个熊猫数据框,它有一些列。如果列表中未显示列,我想删除它们。

熊猫数据框列:

list(pandas_df.columns.values)
Run Code Online (Sandbox Code Playgroud)

结果:

['id', 'name' ,'region', 'city']
Run Code Online (Sandbox Code Playgroud)

和我期望的列名称:

final_table_columns = ['id', 'name', 'year']
Run Code Online (Sandbox Code Playgroud)

经过x次运算的结果应该是:

list(pandas_df.columns.values)

['id', 'name']
Run Code Online (Sandbox Code Playgroud)

ilj*_*lja 13

您可以使用列表理解来创建所有列名 drop()

final_table_columns = ['id', 'name', 'year']
df = df.drop(columns=[col for col in df if col not in final_table_columns])
Run Code Online (Sandbox Code Playgroud)

就地做:

df.drop(columns=[col for col in df if col not in final_table_columns], inplace=True)
Run Code Online (Sandbox Code Playgroud)

  • 为什么不简单地“df = df[final_table_columns]” (2认同)

Acu*_*nus 13

要就地执行此操作,请考虑Index.difference. 这在之前的任何答案中都没有记录。

df.drop(columns=df.columns.difference(final_table_columns), inplace=True)
Run Code Online (Sandbox Code Playgroud)

创建一个新的数据框Index.intersection也是可行的。

df_final = df.drop(columns=df.columns.difference(final_table_columns)

df_final = df[df.columns.intersection(final_table_columns)]  # credited to unutbu
Run Code Online (Sandbox Code Playgroud)


unu*_*tbu 5

使用Index.intersection查找索引的交集和(列)标签的列表:

pandas_df = pandas_df[pandas_df.columns.intersection(final_table_columns)]
Run Code Online (Sandbox Code Playgroud)