如何在函数python中删除数据帧的行



我有dataframe,我想drop函数内的一些行

def IncomeToGo(dataframe, mainCatName):
for k in dataframe.name:
if mainCatName in k:
dataframe= dataframe.drop(dataframe.loc[dataframe.name == k].index)

这就是我使用功能的方式

print(len(df1)) // len = 21
IncomeToGo(df1, 'Apple')
print(len(df1)) // len = 21

但是drop部分没有做任何事情,也没有从我的dataframe中删除任何内容

IIUC,有一种方法:

def IncomeToGo(dataframe, mainCatName):
return dataframe[dataframe.name.ne(mainCatName)]

示例:

初始df:

name     menu
0     A   cheese
1     A     cake
2     A  sausage
3     B  chicken
4     B     cake
5     B    water
6     C  chicken
7     C  sausage
8     C    water
9     D    water
10    D   cheese
11    D  sausage
df = pd.DataFrame({'name': {0: 'A',
1: 'A',
2: 'A',
3: 'B',
4: 'B',
5: 'B',
6: 'C',
7: 'C',
8: 'C',
9: 'D',
10: 'D',
11: 'D'},
'menu': {0: 'cheese',
1: 'cake',
2: 'sausage',
3: 'chicken',
4: 'cake',
5: 'water',
6: 'chicken',
7: 'sausage',
8: 'water',
9: 'water',
10: 'cheese',
11: 'sausage'}})

def IncomeToGo(dataframe, mainCatName):
return dataframe[dataframe.name.ne(mainCatName)]
IncomeToGo(df, 'A')

输出df:

name     menu
3     B  chicken
4     B     cake
5     B    water
6     C  chicken
7     C  sausage
8     C    water
9     D    water
10    D   cheese
11    D  sausage

您的代码中有两个错误:

  1. 函数不会返回任何内容
  2. 您可以从正在循环的列中删除行。这是一种非常糟糕的做法

试着过滤掉这些行:

def IncomeToGo(dataframe, mainCatName):
return dataframe[dataframe.name != mainCatName]

如果您想用于列值上的循环,您可以尝试以下方法

def IncomeToGo(dataframe, mainCatName):
for k in dataframe.name.unique():
if mainCatName == k:
dataframe = dataframe.loc[dataframe.name != mainCatName].copy()

return dataframe

我建议不要在函数中对列名进行硬编码。以这样一种方式编写它们,即函数可以在多个位置动态使用。

最新更新