修改函数内的索引 DataFrame 会更改原始变量
Modifying an indexed DataFrame inside a function changes the original variable
以下脚本在调用 df_lower
之前和之后两次打印相同的输入变量 input_df
:
import pandas as pd
def df_lower(df):
cols = ['col_1']
df[cols] = df[cols].applymap(lambda x: x.lower())
return df
input_df = pd.DataFrame({
'col_1': ['ABC'],
'col_2': ['XYZ']
})
print(input_df)
processed_df = df_lower(input_df)
print(input_df)
输出显示input_df
变化:
col_1 col_2
0 ABC XYZ
col_1 col_2
0 abc XYZ
为什么input_df
被修改了?
为什么在处理完整 input_df
(无列索引)时不修改?
def df_lower_no_indexing(df):
df = df.applymap(lambda x: x.lower())
return df
您正在分配输入数据帧的一部分。
在 无索引 的情况下,您只是将新值分配给局部变量 df
:
df = df.applymap(lambda x: x.lower())
创建一个新变量,保持输入不变。
相反,在第一种情况下,您正在为输入的一部分赋值,因此修改输入本身:
df[cols] = df[cols].applymap(lambda x: x.lower())
通过简单的更改,您也可以在第一种情况下创建一个新变量:
def df_lower(df):
cols = ['col_1']
df = df[[col for col in df.columns if col not in cols]]
df[cols] = df[cols].applymap(lambda x: x.lower())
return df
以下脚本在调用 df_lower
之前和之后两次打印相同的输入变量 input_df
:
import pandas as pd
def df_lower(df):
cols = ['col_1']
df[cols] = df[cols].applymap(lambda x: x.lower())
return df
input_df = pd.DataFrame({
'col_1': ['ABC'],
'col_2': ['XYZ']
})
print(input_df)
processed_df = df_lower(input_df)
print(input_df)
输出显示input_df
变化:
col_1 col_2
0 ABC XYZ
col_1 col_2
0 abc XYZ
为什么input_df
被修改了?
为什么在处理完整 input_df
(无列索引)时不修改?
def df_lower_no_indexing(df):
df = df.applymap(lambda x: x.lower())
return df
您正在分配输入数据帧的一部分。
在 无索引 的情况下,您只是将新值分配给局部变量 df
:
df = df.applymap(lambda x: x.lower())
创建一个新变量,保持输入不变。
相反,在第一种情况下,您正在为输入的一部分赋值,因此修改输入本身:
df[cols] = df[cols].applymap(lambda x: x.lower())
通过简单的更改,您也可以在第一种情况下创建一个新变量:
def df_lower(df):
cols = ['col_1']
df = df[[col for col in df.columns if col not in cols]]
df[cols] = df[cols].applymap(lambda x: x.lower())
return df