Python 返回将dataframe作为参数的函数的输出

Python 返回将dataframe作为参数的函数的输出,python,pandas,Python,Pandas,我有一个熊猫数据框,看起来像: d = {'some_col' : ['A', 'B', 'C', 'D', 'E'], 'alert_status' : [1, 2, 0, 0, 5]} df = pd.DataFrame(d) 我工作中的许多任务都需要在熊猫中完成相同的任务。我开始编写标准化函数,将数据帧作为参数并返回一些内容。这里有一个简单的例子: def alert_read_text(df, alert_status=None): if (alert_status

我有一个熊猫数据框,看起来像:

d = {'some_col' : ['A', 'B', 'C', 'D', 'E'],
     'alert_status' : [1, 2, 0, 0, 5]}
df = pd.DataFrame(d)
我工作中的许多任务都需要在熊猫中完成相同的任务。我开始编写标准化函数,将数据帧作为参数并返回一些内容。这里有一个简单的例子:

def alert_read_text(df, alert_status=None):
    if (alert_status is None):
        print 'Warning: A column name with the alerts must be specified'
    alert_read_criteria = df[alert_status] >= 1
    df[alert_status].loc[alert_read_criteria] = 1
    alert_status_dict = {0 : 'Not Read',
                         1 : 'Read'}
    df[alert_status] = df[alert_status].map(alert_status_dict)
    return df[alert_status]
我想让函数返回一个序列。通过这种方式,可以向现有数据框添加列:

df['alert_status_text'] = alert_read_text(df, alert_status='alert_status')

但是,当前,此函数将正确返回序列,但也会修改现有列。如何使传入的原始列不被修改?

正如您发现传入的数据帧将被修改为通过引用传递的参数,这在python中是正确的,与熊猫本身无关

因此,如果您不想修改传递的df,请复制:

def alert_read_text(df, alert_status=None):
    if (alert_status is None):
        print 'Warning: A column name with the alerts must be specified'
    copy = df.copy()
    alert_read_criteria = copy[alert_status] >= 1
    copy[alert_status].loc[alert_read_criteria] = 1
    alert_status_dict = {0 : 'Not Read',
                         1 : 'Read'}
    copy[alert_status] = copy[alert_status].map(alert_status_dict)
    return copy[alert_status]

另请参见相关内容:

您可以在函数体中复制,例如
copy=df.copy()
,谢谢!这就解决了问题。是否有一个标准化的变量名,在这样的函数中用作副本?也就是说,熊猫数据帧通常缩写为df等。人们通常将其命名为“复制”吗?或者它通常是你想出的任何东西?@DataSwede这只是一个简单的黑客示例,你可以随便叫它,
tmp
也可以