Python 应用函数

Python 应用函数,python,pandas,dataframe,etl,Python,Pandas,Dataframe,Etl,我正在尝试将一个函数应用到熊猫数据帧,我想应用的函数是创建一个新列,其中的“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 +

我正在尝试将一个函数应用到熊猫数据帧,我想应用的函数是创建一个新列,其中的“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
我本想在我的专栏“我的大学”中有“abc”,但我得到了“NaN”。提前感谢

您不能这样做:

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

df["my_col"] = 'abc'

像这样的东西有用吗


作为pd进口熊猫
d={'age':[25,22]}
def添加一(x):
返回x+1
def创建列(行):
行['my_col']='abc'
返回行
df=pd.DataFrame(d,列=['age'])
df[“年龄”]=df[“年龄”]。申请(添加一个)
df=df.apply(创建列,轴=1)
打印(df)
年龄1岁我的大学
0 25 26 abc
12223美国广播公司

使用
pandas
时,您希望尽量避免
应用
,而是对整个
系列
数据帧
使用矢量化操作。如果可能,您的方法签名应该接受一个序列,操纵该序列,然后返回一个可以分配回的序列,或者接受数据帧,操纵数据帧并返回修改后的数据帧

因此,如果您想创建一个函数,将其添加到一个系列中,您可以执行以下操作:

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
如果需要创建静态值的函数,可以传递并返回数据帧:

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

您不需要
应用
。直接使用
df[“my_col”]=“abc”
?你是对的,它会工作,但我尝试使用函数,因为最终这个项目会变得更大,我想让函数对它们进行单元测试。这会工作,但我尝试在这里使用函数,因为最终我会喜欢对我的函数进行单元测试。这有意义吗?@AlexBrunet您通常不会使用
apply
创建新列。它用于将函数应用于每个现有行,而不是创建新行。我知道你想测试它,但它不是apply的用途。好的,谢谢你的解释:)哦,很好,是的,它有帮助,谢谢!非常感谢,非常有用!嘿@ALollz谢谢你的回复,非常有用。
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