无法为 Pandas 中的某些列赋值

Posted

技术标签:

【中文标题】无法为 Pandas 中的某些列赋值【英文标题】:Cannot assign a value to certain columns in Pandas 【发布时间】:2018-05-07 23:16:45 【问题描述】:

您好,我正在尝试在数据框的列中分配某些值。

# Count the number of title counts
full.groupby(['Sex', 'Title']).Title.count()
Sex     Title        
female   Dona              1
         Dr                1
         Lady              1
         Miss            260
         Mlle              2
         Mme               1
         Mrs             197
         Ms                2
         the Countess      1
male     Capt              1
         Col               4
         Don               1
         Dr                7
         Jonkheer          1
         Major             2
         Master           61
         Mr              757
         Rev               8
         Sir               1
Name: Title, dtype: int64

我的数据框尾部如下所示:

    Age Cabin   Embarked    Fare    Name    Parch   PassengerId Pclass  Sex SibSp   Survived    Ticket  Title
413 NaN NaN S   8.0500  Spector, Mr. Woolf  0   1305    3   male    0   NaN A.5. 3236   Mr
414 39.0    C105    C   108.9000    Oliva y Ocana, Dona. Fermina    0   1306    1   female  0   NaN PC 17758    Dona
415 38.5    NaN S   7.2500  Saether, Mr. Simon Sivertsen    0   1307    3   male    0   NaN SOTON/O.Q. 3101262  Mr
416 NaN NaN S   8.0500  Ware, Mr. Frederick 0   1308    3   male    0   NaN 359309  Mr
417 NaN NaN C   22.3583 Peter, Master. Michael J    1   1309    3   male    1   NaN 2668    Master

我的数据框的名称是full,我想更改标题的名称。

下面是我写的代码:

# Create a variable rate_title to modify the names of Title
rare_title = ['Dona', "Lady", "the Countess", "Capt", "Col", "Don", "Dr", "Major", "Rev", "Sir", "Jonkheer"]
# Also reassign mlle, ms, and mme accordingly
full[full.Title == "Mlle"].Title = "Miss"
full[full.Title == "Ms"].Title = "Miss"
full[full.Title == "Mme"].Title = "Mrs"
full[full.Title.isin(rare_title)].Title = "Rare Title"

我还在 pandas 中尝试了以下代码:

full.loc[full['Title'] == "Mlle", ['Sex', 'Title']] = "Miss"

仍然没有改变数据框。任何帮助表示赞赏。

【问题讨论】:

Update row values where certain condition is met in pandas的可能重复 @JesseBarnett 你能找到另一个副本吗?这个答案是一团糟,并没有真正解决这个问题。 【参考方案1】:

使用基于loc 的索引并设置匹配的行值 -

miss = ['Mlle', 'Ms', 'Mme']
rare_title = ['Dona', "Lady", ...]

df.loc[df.Title.isin(miss), 'Title'] = 'Miss'
df.loc[df.Title.isin(rare_title), 'Title'] = 'Rare Title'

【讨论】:

谢谢coldspeed。我会检查您的解决方案并稍后回复您 我应用了你的代码并检查了数据框的头部和尾部,似乎标题没有改变。 @JaneshDevkota 我有一些关于原因的想法。你是如何加载数据的?似乎其中很多都有前导空格字符。 你是对的。由于空格字符,看起来可能代码不起作用。我删除了它们,它工作正常。 不错,我以为就是这样。

以上是关于无法为 Pandas 中的某些列赋值的主要内容,如果未能解决你的问题,请参考以下文章

pandas 用 .loc[,]=value 筛选并原地赋值回原来的 DataFrame

pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移索引不移动,移动之后无值的赋值为NaN将原数据列与偏移后的数据列相加生成新的数据列

pandas组中的条件赋值,由

6.Pandas怎样新增数据列

为 Pandas 中的多列赋值[重复]

Pandas总结第六节 Pandas 添加列