python - 以正确的方式更新 Pandas Dataframe 中的列值
问题描述
我正在参加kaggle中的普通初学者比赛,并意识到将 Age 添加到分类器会有所帮助。问题是,它有Age 列的NaN值,我不想填充整个 df 上的所有 NaN,只是 Age 列。我应用下面的解决方案(通过获取中值),然后定位行并像这样更新_train['Age'] = X_train['Age'].fillna(X_train_median)
。
我知道这不是一个好习惯,它有效,但我收到以下错误
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
是否可以以更好的方式为 df 中与特定条件匹配的所有值更新特定列?下面的示例代码。
# IMPORT DATA
train_data = pd.read_csv("data/train.csv")
test_data = pd.read_csv("data/test.csv")
# ASSIGN TO VAR
X_test = test_data
X = train_data
y = train_data["Survived"]
# SPLIT
X_train, X_val, Y_train, Y_val = train_test_split(X, y, random_state=1)
# SELECTED FEATURES
features = ["Pclass", "Sex", "SibSp", "Parch", "Embarked", "Age"]
# REMOVE NA's BY POPULATING WITH MEDIAN VAL
X_train_median = X_train['Age'].median()
X_val_median = X_val['Age'].median()
X_test_median = X_test['Age'].median()
X_train['Age'] = X_train['Age'].fillna(X_train_median)
X_val['Age'] = X_val['Age'].fillna(X_val_median)
X_test['Age'] = X_test['Age'].fillna(X_test_median)
# ONE HOT FOR CATAGORICAL VALS
X_train = pd.get_dummies(X_train[features])
X_val = pd.get_dummies(X_val[features])
X_test = pd.get_dummies(X_test[features])
解决方案
我相信这应该有效:
X_train['Age'] = X_train.loc[:, 'Age'].fillna(X_train_median)
X_val['Age'] = X_val.loc[:, 'Age'].fillna(X_val_median)
X_test['Age'] = X_test.loc[:, 'Age'].fillna(X_test_median)
文档:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html
推荐阅读
- objective-c - 在 Xcode 11.1 中编译时的照片框架错误
- spring-cloud - 关于开发spring-cloud-sdk,汇聚所有开发依赖的问题
- r - 调用函数没有被执行
- spring-boot - 需要 LoggersMvcEndpoint 的匹配类。在 spring-boot 2.1.9 版本中
- r - 调整条形图中点的位置
- apache - Apache 服务器不会在 MAMP 上启动
- php - php composer运行安装库不起作用
- keras - 为什么从头开始用图像训练 VGG16 CNN 不会显示收敛?
- flask - 为什么烧瓶应用程序在cpanel中抛出错误
- python - 如何在解析 Instagram 时修复 KeyError?