【问题标题】:Python pandas appear warning when use dataframe operationPython pandas 在使用数据框操作时出现警告
【发布时间】:2019-11-04 03:17:17
【问题描述】:
final_merge['user_ID']=''
for i in range(len(final_merge)):
    if final_merge.loc[i,'user_x']=='nan':
        final_merge['user_ID'][i]= final_merge['user_y'][i]
    else:
        final_merge['user_ID'][i]= final_merge['user_x'][i]

当我使用代码时,我的控制台中有两个警告。

__main__:6: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
__main__:4: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

我知道警告的意思,但是如何更改我的代码以避免这些警告?

【问题讨论】:

  • 试试 final_merge.loc[i, 'user_ID']?但绝对同意下面的@WeNYoBen。有了 pandas,除了循环之外,还有很多事情要做

标签: python pandas dataframe warnings


【解决方案1】:

这和SettingWithCopyWarning有关,同样在pandas中我们通常有多种方式而不是for循环来处理这种情况

np.where

final_merge['user_ID']=np.where(final_merge['user_x']=='nan',final_merge['user_y'],final_merge['user_x'])

或者fillna,如果nan是np.nan,如果不是final_merge['user_x'].replace('nan',np.nan, inplace=True)

final_merge['user_ID']=final_merge['user_x'].fillna(final_merge['user_y'])

mask

final_merge['user_ID']=final_merge['user_x'].mask(final_merge['user_x']=='nan',final_merge['user_y'])

【讨论】:

    猜你喜欢
    • 2018-04-01
    • 2023-02-15
    • 2021-05-25
    • 2015-05-29
    • 2019-04-21
    • 1970-01-01
    • 2017-10-29
    • 2017-11-17
    • 1970-01-01
    相关资源
    最近更新 更多