晚上好
在下面的数据框中,列'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.
}
});
})
答案 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