【问题标题】:How to remove NaN values from corr() function output如何从 corr() 函数输出中删除 NaN 值
【发布时间】:2018-07-10 19:41:59
【问题描述】:

编辑显示原始数据框示例:

df.head(4)

            shop   category  subcategory     season
date                
2013-09-04  abc    weddings  shoes           winter
2013-09-04  def    jewelry   watches         summer
2013-09-05  ghi    sports    sneakers        spring
2013-09-05  jkl    jewelry   necklaces       fall

我已经使用 get_dummies() 成功生成了以下数据帧:

wedding_seasons = pd.get_dummies(df.loc[df['category']=='weddings',['category','season']],prefix = '', prefix_sep = '' )

wedding_seasons.head(3)

        weddings    winter  summer  spring  fall
71654   1.0         0.0     1.0     0.0     0.0
72168   1.0         0.0     1.0     0.0     0.0
72080   1.0         0.0     1.0     0.0     0.0

以上的目的是帮助评估跨季节的婚礼频率,所以我使用corr() 来生成以下结果:

         weddings   fall       spring     summer       winter
weddings NaN        NaN        NaN        NaN          NaN
fall     NaN        1.000000   0.054019   -0.331866    -0.012122
spring   NaN        0.054019   1.000000   -0.857205    0.072420
summer   NaN        -0.331866  -0.857205  1.000000     -0.484578
winter   NaN        -0.012122  0.072420   -0.484578    1.000000

我不确定为什么婚礼栏会生成 NaN 值,但我的直觉是它源于我最初创建 wedding_seasons 的方式。任何指导将不胜感激,以便我可以正确评估列相关性。

【问题讨论】:

  • weddings 的值是否会改变?如果它是恒定的,那么.corr() 永远是NaN
  • @HarvIpan 这是一个很好的观点 - 我已经编辑了我上面的帖子以显示我原来的 df 的示例行。看着wedding_seasons,我觉得loc() 函数只是过滤weddings 值时它确实应该扫描每一行并在条目不是weddings 时提供0。想法?
  • 您只为df.loc[df['category']=='weddings' 创建假人。这就是为什么您过滤的数据总是将婚礼设为 1。
  • @HarvIpan 这很有意义。有没有一种方法可以使用get_dummies() 来检查cateogry 列中专门针对weddings 的所有行,而不仅仅是使用weddings 过滤行?
  • 不确定,如果我遵循您的问题。可能会问另一个问题?不知道为什么要找到 3 个变量和一个常数变量之间的相关性。如果您只是想分析季节并找出哪个季节贡献最大,条形图就足够了。

标签: python pandas correlation dummy-variable


【解决方案1】:

我认为您在这里感兴趣的不是“相关性”。

数据框wedding_seasons 中的所有列都包含浮点值;但是,如果我的怀疑是正确的,那么原始数据框 df 中的行包含类似于交易记录的内容,其中每一行对应一个人。

如果我错了,请告诉我,但我会继续我的推理。

相关性将直观地衡量在同一观察中值一起/彼此变化的趋势(例如,如果 X 和 Y 负相关,那么当我们看到 X 高于其平均值时,我们会期望 Y 出现低于平均值)。

但是,您在这里拥有的是数据,如果一个事务是summer,那么绝对不可能同时是winter。当您创建wedding_seasons 时,Pandas 正在创建虚拟变量,这些变量在计算相关矩阵时被视为浮点值;因为任何行不可能同时包含两个 1.0 条目,所以很明显,您得到的相关矩阵将到处都有负条目。

【讨论】:

    【解决方案2】:

    您可以在corr() 之前删除婚礼栏。

    wedding_seasons.drop(columns = ['weddings'])
    

    【讨论】:

    • 我想保留weddings 列,但我不希望它只是从原始category 列中过滤weddings。想法是使用假人来确定所有行中哪一行有weddings 作为输入。这将有效地让我绘制与季节的相关性,否则它将是NaN
    • 我认为不能回答这个问题。 :(
    • 我解决了如何摆脱 NaN 的问题。想法是将婚礼列放在原始 df 的副本上,副本将用于计算相关性。我可以删除答案,没什么大不了的。
    猜你喜欢
    • 2018-07-05
    • 2016-04-26
    • 1970-01-01
    • 2020-10-02
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    相关资源
    最近更新 更多