Pandas 应用函数

Pandas apply function

我正在尝试将一个函数应用于 pandas 数据框,我想应用的函数是创建一个以 'abc' 作为值的新列。但是输出不是我所期望的。这是带有输入和输出的代码:

import pandas as pd

df = pd.read_csv("test.csv")
print(df)

# Initial Dataframe
#      name  age
# 0    alex   25
# 1  audrey   22

def add_one(df):
    return df + 1

def create_col(df):
    df["new_col"] = 'abc'


df["age_1_year"] = df["age"].apply(add_one)
df["my_col"] = df.apply(create_col)
print(df)

#      name  age  age_1_year my_col
# 0    alex   25          26    NaN
# 1  audrey   22          23    NaN

我原本希望在我的专栏“my_col”中有 'abc',但我得到的是“NaN”。提前致谢

你能不能不这样做:

df["age_1_year"] = df["age"] +1

df["my_col"] = 'abc'

这样的事情有帮助吗?


import pandas as pd


d = {'age': [25, 22]}

def add_one(x):
    return x + 1

def create_col(row):
    row['my_col'] = 'abc'
    return row

df = pd.DataFrame(d, columns=['age'])
df["age_1_year"] = df["age"].apply(add_one)
df = df.apply(create_col, axis=1)

print(df)

   age  age_1_year my_col
0   25          26    abc
1   22          23    abc
import pandas as pd

df = pd.read_csv("test.csv")
print(df)

# Initial Dataframe
#      name  age
# 0    alex   25
# 1  audrey   22

def add_one(df):
    return df + 1

def create_col(df):
    return 'abc'


df["age_1_year"] = df["age"].apply(add_one)
df["my_col"] = df.apply(lambda x: create_col(x), axis=1)
##can also do
##df["my_col"] = df.pipe(create_col)

对于 pandas,您希望尽可能避免 apply,而是对整个 SeriesDataFrame 使用矢量化操作。如果可能,您的方法签名应该接受一个系列,操作该系列,然后 return 一个您可以分配回的系列,或者接受 DataFrame,操作 DataFrame 和 return 修改后的 DataFrame。

因此,如果您想创建一个函数来向系列中添加一个,您可以这样做:

def add_one(s: pd.Series):
    return s+1

df['age_one_year'] = add_one(df['age'])
#     name  age  age_one_year
#0    alex   25            26
#1  audrey   22            23

如果你想要一个创建静态值的函数,你可以传递 return DataFrame:

def add_static_column(df: pd.DataFrame, col_name, static_val):
    df[col_name] = static_val
    return df

df = add_static_column(df, 'new_col', 'abc')
#     name  age  age_one_year new_col
#0    alex   25            26     abc
#1  audrey   22            23     abc