Python 应用函数
我正在尝试将一个函数应用到熊猫数据帧,我想应用的函数是创建一个新列,其中的“abc”是一个值。但是输出不是我所期望的。以下是包含输入和输出的代码: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 +
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