一开始,我试着写一些代码,看起来像这样:
import numpy as np
import pandas as pd
np.random.seed(2016)
train = pd.DataFrame(np.random.choice([np.nan, 1, 2], size=(10, 3)),
columns=['Age', 'SibSp', 'Parch'])
complete = train.dropna()
complete['AgeGt15'] = complete['Age'] > 15
在获得SettingWithCopyWarning之后,我尝试了using.loc:
complete.loc[:, 'AgeGt15'] = complete['Age'] > 15
complete.loc[:, 'WithFamily'] = complete['SibSp'] + complete['Parch'] > 0
但是,我仍然收到相同的警告。怎么回事?
发布于 2018-10-02 13:35:13
我通过创建dataframe的副本来解决它:
complete = train.copy()
发布于 2019-11-08 20:29:15
如果不是原始数据框中的np.nan
,我认为您的.loc
解决方案是可行的。您可以使用complete = train.dropna().reset_index()
或Pandas .assign()来避免使用SettingWithCopyWarning
,这是创建新列、返回新数据框对象的推荐方法。您的示例:
complete = complete.assign(**{'AgeGt15': np.where(complete['Age'] > 15, True, False)})
https://stackoverflow.com/questions/38809796
复制相似问题