【发布时间】:2017-08-27 11:27:03
【问题描述】:
我正在玩 Titanic 数据集,我想做的是用基于 Pclass 的中值填充 Age 列的所有 NaN/Null 值。
这是一些数据:
train
PassengerId Pclass Age
0 1 3 22
1 2 1 35
2 3 3 26
3 4 1 35
4 5 3 35
5 6 1 NaN
6 7 1 54
7 8 3 2
8 9 3 27
9 10 2 14
10 11 1 Nan
这是我想要的结果:
PassengerId Pclass Age
0 1 3 22
1 2 1 35
2 3 3 26
3 4 1 35
4 5 3 35
5 6 1 35
6 7 1 54
7 8 3 2
8 9 3 27
9 10 2 14
10 11 1 35
我想出的第一件事是——为了简洁起见,我只为 Pclass 添加了一个等于 1 的切片,而不是包括 2 和 3:
Pclass_1 = train['Pclass']==1
train[Pclass_1]['Age'].fillna(train[train['Pclass']==1]['Age'].median(), inplace=True)
据我了解,此方法创建视图而不是编辑 train 本身(我不太明白这与副本有何不同,或者它们在内存方面是否相似——这是如果可能的话,我很想听听)。我特别喜欢这个关于 View vs Copy, How Do I Tell? 主题的问答,但它不包括我正在寻找的洞察力。
通过查看 Pandas 文档,我了解了为什么要使用 .loc 来避免这个陷阱。但是我似乎无法正确使用语法。
Pclass_1 = train.loc[:,['Pclass']==1]
Pclass_1.Age.fillna(train[train['Pclass']==1]['Age'].median(),inplace=True)
我迷失在索引中。这最终会寻找一个名为False 的列,该列显然不存在。如果没有链式索引,我不知道如何做到这一点。 train.loc[:,train['Pclass']==1] 返回异常 IndexingError: Unalignable boolean Series key provided。
【问题讨论】:
-
一般来说,如果您提供Minimal, Complete, and Verifiable 示例,尤其是可剪切和粘贴示例和预期数据,此类问题将得到更快和更多的回答。
-
我现在添加了一些来自真实数据框的示例数据。
-
@prdctofchem 我已经根据添加的示例数据更新了我的答案。
标签: python pandas indexing view conditional