【问题标题】:Why can't I assign an 'object' datatype to a Pandas series that contains all 'object' type entries?为什么我不能将“对象”数据类型分配给包含所有“对象”类型条目的 Pandas 系列?
【发布时间】:2020-03-17 20:38:39
【问题描述】:

我想用最常见的值,即'S'来填充titanic数据集中的一些缺失数据:

# This does not work:     
df.loc[df.Embarked.isnull(), 'Embarked'] = df.Embarked.mode()

# But this does work: 
df.loc[df.Embarked.isnull(), 'Embarked'] = 'S'

# And this works too:   
df.loc[df.Embarked.isnull(), 'Embarked'] = str(df.Embarked.mode())

我认为这可能与不匹配的数据类型有关,所以我检查了这个:

df.Embarked.mode()
>>> 
0    S
dtype: object

所以模式作为对象返回。检查 Embarked 列的数据类型,我们看到它还包含所有对象:

df.Embarked
>>> 
PassengerId
1       S
2       C
3       S
4       S
5       S
       ..
1305    S
1306    C
1307    S
1308    S
1309    C
Name: Embarked, Length: 1309, dtype: object

现在我已经弄清楚什么是有效的,并且实施起来并不难,我只是好奇为什么显而易见的(对我而言)解决方案不起作用?

【问题讨论】:

  • df.loc[df.Embarked.isnull(), 'Embarked'] = df.Embarked.mode()[0]?
  • object 是列中元素的类型(pandas 调用 strobject)。如果你做了type(df.Embarked.mode()),你会看到它是Series,以防你有多个模式(即没有重复)。您只需要第一个元素的值,所以@QuangHoang 所说的将起作用。
  • @E.Bassett,有趣的是,将系列转换为字符串也可以。谢谢你广黄。如果你们中的任何一个想要扩展答案,我很乐意给你一些互联网信誉。不管怎样,谢谢。
  • 我很惊讶演员的工作和str(df.Embarked.mode()) 没有给你像'0 PassengerId\ndtype: object' 这样的东西

标签: python pandas dataframe data-structures


【解决方案1】:

一些背景:
object 是列中元素的类型(熊猫调用strobject)。如果你做了type(df.Embarked.mode()),你会看到它是Series,以防你有多个模式(即没有重复)。

你想要什么:
df.loc[df.Embarked.isnull(), 'Embarked'] = df.Embarked.mode()[0]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2021-08-05
    • 2021-07-07
    • 1970-01-01
    相关资源
    最近更新 更多