【问题标题】:Complex case of filling NaNs in PandasPandas 中填充 NaN 的复杂案例
【发布时间】:2016-03-24 23:22:51
【问题描述】:

有没有办法解决这个问题...

   bloomberg  morningstar  yahoo
0  AAPL1      AAPL2        NaN
1  AAPL1      NaN          AAPL3
2  NaN        GOOG4        GOOG5
3  GOOG6      GOOG4        NaN
4  IBM7       NaN          IBM8
5  NaN        IBM9         IBM8
6  NaN        NaN          FB

...到这个...

   bloomberg  morningstar  yahoo
0  AAPL1      AAPL2        AAPL3
1  GOOG6      GOOG4        GOOG5
2  IBM7       IBM9         IBM8
3  NaN        NaN          FB

...在熊猫中?

我已经充分整理了我的数据,以确保在起始数据框的给定列中永远不会有任何“冲突”信息,例如以下是不可能...

   A column  Another column
0  AAPL1     One thing
1  AAPL1     Another thing

唯一可能发生的情况是,任何给定的列要么有 1) 没有信息,要么 2) 有正确的信息,例如

   A column  Another column
0  AAPL1     NaN
1  AAPL1     The right information

我要做的就是在可用的情况下用 “正确” 信息填充 NaN,然后​​删除重复项(这应该很容易)。

但是应该保留一些 NaN,因为我没有足够的数据来推断它们的值,例如示例中的 FB 行。

谁有好的答案?感谢您的帮助!

如果您想尝试一下,这里有一些代码可以加载起始数据帧:

import pandas as pd
data = [
        {'bloomberg': 'AAPL1', 'morningstar': 'AAPL2'},
        {'bloomberg': 'AAPL1', 'yahoo': 'AAPL3'},
        {'morningstar': 'GOOG4', 'yahoo': 'GOOG5'},
        {'bloomberg': 'GOOG6', 'morningstar': 'GOOG4'},
        {'bloomberg': 'IBM7', 'yahoo': 'IBM8'},
        {'morningstar': 'IBM9', 'yahoo': 'IBM8'},
        {'yahoo': 'FB'}]
df = pd.DataFrame(data)

【问题讨论】:

    标签: python pandas dataframe nan


    【解决方案1】:

    链接 ffillbfill 会做你想做的事:

    df.fillna(method='ffill', axis=1).fillna(method='bfill', axis=1).drop_duplicates()
    
      bloomberg morningstar yahoo
    0      AAPL        AAPL  AAPL
    2      GOOG        GOOG  GOOG
    4       IBM         IBM   IBM
    

    【讨论】:

    • 射击。我没有问正确的问题。完全是我的错,因为您的回答绝对适用于我的示例(谢谢!)。也就是说,它不适用于我的实际数据,因为我有一些数据只有 1 行,而该行包含缺失的数据,这些数据应该仍然缺失,例如列 ['bloomberg', 'morningstar', 'yahoo'] 的行 [NaN, NaN, 'FB'],这是数据中唯一的 FB 实例(即唯一的 FB 行)。我不确定 FB 的 'bloomberg' 值或 'morningstar' 值是 'FB';所以我需要将这些 NaN 留在数据中。
    猜你喜欢
    • 2015-02-14
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2019-12-26
    相关资源
    最近更新 更多