熊猫 - 填充NaN的变化 - 这是一种优雅和pythonic的方法吗?

时间:2015-04-27 21:43:22

标签: python pandas

晚上好

在下面的数据框中,列'c'有几个NaN

用一个值填充第一个N nans并使用另一个nans填充剩余的nans有什么好的pythonic方法

(示例:使用值10填充前3 nans,将剩余的2 20填入值 a b c a 5 5 NaN b 5 8 8 c 0 1 NaN d 8 5 6 e 1 6 NaN f 2 5 8 g 6 5 5 h 0 1 3 i 7 3 NaN j 2 6 NaN

谢谢

nan_number = df['c'].isnull().cumsum()[df['c'].isnull()] 
df['c'][nan_number.index[nan_number<=3]] = 10
df['c'][nan_number.index[nan_number>3]] = 20

编辑I - 这是一种(非pythonic)方式:

nan_rows = df.index[df['c'].isnull()]
df.loc[nan_rows[:3], 'c'] = 10  
df.loc[nan_rows[3:], 'c'] = 20

编辑II - 开始看起来更好:

var myJSON; //the json object data you're going to draw to canvas with

$(document).ready(function(){
        $.ajax({
            url: "myurl.com/myjsonfile",
            dataType: "text",
            success: function(data) {
                myJSON = $.parseJSON(data);
                drawToCanvas(myJSON); //you can, perhaps, make the code
                                      //Xufox provided into a function that
                                      //you pass your myJSON var to once it
                                      //is loaded.
            }
        });
    })

1 个答案:

答案 0 :(得分:4)

您可以使用fillna,这需要limit参数:

In [75]:

df = df.fillna(10,limit=3)
df = df.fillna(20)
df
Out[75]:
   a  b   c
a  5  5  10
b  5  8   8
c  0  1  10
d  8  5   6
e  1  6  10
f  2  5   8
g  6  5   5
h  0  1   3
i  7  3  20
j  2  6  20

如果您更喜欢单行,则可以将来电链接到fillna

In [80]:

df = df.fillna(10,limit=3).fillna(20)
df
Out[80]:
   a  b   c
a  5  5  10
b  5  8   8
c  0  1  10
d  8  5   6
e  1  6  10
f  2  5   8
g  6  5   5
h  0  1   3
i  7  3  20
j  2  6  20