我有一个熊猫数据框,它有一些列。如果列表中未显示列,我想删除它们。
熊猫数据框列:
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)
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)
使用Index.intersection查找索引的交集和(列)标签的列表:
pandas_df = pandas_df[pandas_df.columns.intersection(final_table_columns)]
Run Code Online (Sandbox Code Playgroud)