如何使用for循环从数据帧中删除许多行,这些循环遍历需要删除的值



我正试图按其名称删除数百万行,即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_summaryrows_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)

最新更新