返回以pandas dataframe作为参数的函数的输出

2024-05-08 12:57:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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')

但是,当前,此函数将正确返回一个序列,同时还修改现有列。如何才能使传入的原始列不被修改?


Tags: 数据函数textnonedfreadstatus序列
1条回答
网友
1楼 · 发布于 2024-05-08 12:57:01

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

因此,如果不想修改通过的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]

另请参见相关:pandas dataframe, copy by value

相关问题 更多 >