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
,而是对整个 Series
或 DataFrame
使用矢量化操作。如果可能,您的方法签名应该接受一个系列,操作该系列,然后 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
我正在尝试将一个函数应用于 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
,而是对整个 Series
或 DataFrame
使用矢量化操作。如果可能,您的方法签名应该接受一个系列,操作该系列,然后 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