首页 > 解决方案 > 为什么python中的方法不起作用,但代码之外的方法起作用?

问题描述

我需要处理一个表,我编写了一个代码来删除'A1_TOP'col 或 ' A2_TOP'col 中的行-

代码:

df = pd.read_csv('SomeFile.txt')
df = df.loc[(df['A1_TOP'] != gap) | (df['A2_TOP'] != gap)]

当我将它放入代码时它工作正常。从数据框中,值“-”的行消失。但是我尝试创建一个方法,因为我使用了这段代码一段时间,干你知道... :) 当我把它放到方法中并尝试使用它时,我没有收到任何错误,只是一个没有删除行的数据框。仍有差距。

这是调用该方法的方式:

#Load file
df = pd.read_csv('SomeFile.txt')

#creating method
def delete_gaps(df):
    df = df.loc[(df['A1_TOP'] != gap) | (df['A2_TOP'] != gap)]
    #df = df.loc[(df['A1_TOP'] != gapVariant) | (df['A2_TOP'] != gapVariant)]
    return df

#method call
delete_gaps(df)

我怀疑我在参数上做错了什么?或者也许是打电话?我试过df = delete_gaps(df)了,但显然 df 是空的。

如果有人可以向我解释什么是问题,为什么会出现问题,我将不胜感激。

PS我没有把桌子放在问题上,因为我认为这不是问题。超越方法的代码工作正常。

标签: pythonpandasdataframe

解决方案


您需要在您的方法中执行此操作:

def delete_gaps(df):
    df = df.copy(deep=True)
    df = df.loc[(df['A1_TOP'] != gap) | (df['A2_TOP'] != gap)]

    return df

如果您将数据帧传递给函数并对其进行操作并返回相同的数据帧,您将在修改后的版本中获得相同的数据帧。如果您不想更改原始数据帧,最好的办法是复制原始数据框。

我使用了复制方法,参数“deep=True”复制了数据框及其内容。

你可以在这里阅读更多:http: //pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.copy.html


推荐阅读