为了账号安全,请及时绑定邮箱和手机立即绑定

范围不是我在使用 Pandas 时所期望的

范围不是我在使用 Pandas 时所期望的

MYYA 2021-11-30 19:24:35
我想输入df一个函数,调用输出另一个数据帧“df_fn”,并且df保持不变。我怎么做?我的代码要么什么也不做df_fn等于df或df_fn并且df都改变了。使用 df_fn[cols][df_fn.fuel_type != 'gas'] = np.nanimport pandas as pdimport numpy as npdf = pd.DataFrame({'n_wheels': [2, 4, 4],                   'color': ['red', 'blue', 'red'],                   'year': [2010, 1990, 1999],                   'fuel_type': ['diesel', 'gas', 'electric']})print('df = \n', df)def fn(df_fn):    cols = ['n_wheels', 'color', 'year']#     df_fn.loc[df_fn.fuel_type != 'gas', cols] = np.nan    df_fn[cols][df_fn.fuel_type != 'gas'] = np.nan    return df_fnnew_df = fn(df)print('df = \n', df)print('new_df = \n', new_df)输出:df =     n_wheels color  year fuel_type0         2   red  2010    diesel1         4  blue  1990       gas2         4   red  1999  electricdf =     n_wheels color  year fuel_type0         2   red  2010    diesel1         4  blue  1990       gas2         4   red  1999  electricnew_df =     n_wheels color  year fuel_type0         2   red  2010    diesel1         4  blue  1990       gas2         4   red  1999  electric使用 df_fn.loc[df_fn.fuel_type != 'gas', cols] = np.nanprint('df = \n', df)def fn(df_fn):    cols = ['n_wheels', 'color', 'year']#     df_fn[cols][df_fn.fuel_type != 'gas'] = np.nan    df_fn.loc[df_fn.fuel_type != 'gas', cols] = np.nan    return df_fnnew_df = fn(df)print('df = \n', df)print('new_df = \n', new_df)输出:df =     n_wheels color  year fuel_type0         2   red  2010    diesel1         4  blue  1990       gas2         4   red  1999  electricdf =     n_wheels color    year fuel_type0       NaN   NaN     NaN    diesel1       4.0  blue  1990.0       gas2       NaN   NaN     NaN  electricnew_df =     n_wheels color    year fuel_type0       NaN   NaN     NaN    diesel1       4.0  blue  1990.0       gas2       NaN   NaN     NaN  electric
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您需要设置原始 df 的副本


print('df = \n', df)

def fn(df_fn):

    cols = ['n_wheels', 'color', 'year']

#     df_fn[cols][df_fn.fuel_type != 'gas'] = np.nan

    df_fn.loc[df_fn.fuel_type != 'gas', cols] = np.nan

    return df_fn

df1=df.copy()#I change here add copy 

new_df = fn(df1)

print('df = \n', df)

print('new_df = \n', new_df)

df = 

    n_wheels color  year fuel_type

0         2   red  2010    diesel

1         4  blue  1990       gas

2         4   red  1999  electric

df = 

    n_wheels color  year fuel_type

0         2   red  2010    diesel

1         4  blue  1990       gas

2         4   red  1999  electric

new_df = 

    n_wheels color    year fuel_type

0       NaN   NaN     NaN    diesel

1       4.0  blue  1990.0       gas

2       NaN   NaN     NaN  electric


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信