我正试图按其名称删除数百万行,即1000多个唯一值。
有一个主数据帧(df_summary(和另一个数据帧,其中包含必须从主数据帧中删除的行的名称。
删除几列不是问题,但需要删除的唯一值的数量太多,无法手动执行。因此,我试图循环通过它。
https://i.stack.imgur.com/NBSvF.jpg"两个数据帧的整体外观,列后面有许多列
以下是我尝试过的:
from pandas import read_csv
import pandas as pd
df_summary = read_csv ('path.csv', sep=',')
rows_to_remove = read_csv ('path.csv', sep=',')
i = 0
for i in range len(rows_to_remove):
item = df.loc[i].item()
df_summary = df_summary.drop(df_summary['contract'] == f"{item}", axis=0)
您可以使用isin
创建掩码&然后使用这个掩码来过滤数据帧(只具有这些值或具有除这些值之外的值(
m = df_summary['contract'].isin(rows_to_remove['contract'])
df_summary [~m]
如果遍历行,其效率将不如使用pandas数据帧的索引功能。我不太理解您的示例中df_summary
和rows_to_remove
之间的区别,因为它们都加载了相同的csv。但是,让我们假设您在一个名为values_to_remove
的列表中拥有想要删除的df_summary['contract']
的所有值。然后你可以做这样的事情:
# values_to_remove = the list of values you are trying to remove
df_cleaned = df_summary.loc[ ~df_summary['contract'].isin(values_to_remove) ]
根据经验,大多数时候当你在panda对象上循环时,你不应该这样做,因为有更好的方法。
试试这个:
df_summary.drop(rows_to_remove.values, inplace=True)