在熊猫中填充NaNs的复杂情况

时间:2016-03-23 21:14:43

标签: python pandas dataframe nan

有没有办法摆脱这个......

   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

我想要做的就是用可用的“right”信息填充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)

1 个答案:

答案 0 :(得分: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