2016-06-30 31 views
29

Tôi đang cố gắng điền vào không có giá trị trong một khung dữ liệu Pandas với 0 cho chỉ một số tập hợp con cột.Pandas dataframe fillna() chỉ có một số cột tại chỗ

Khi tôi làm:

import pandas as pd 
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]}) 
print df 
df.fillna(value=0, inplace=True) 
print df 

Sản lượng:

 a b c 
0 1.0 4.0 NaN 
1 2.0 5.0 NaN 
2 3.0 NaN 7.0 
3 NaN 6.0 8.0 
    a b c 
0 1.0 4.0 0.0 
1 2.0 5.0 0.0 
2 3.0 0.0 7.0 
3 0.0 6.0 8.0 

Nó thay thế mỗi None với 0 's. Những gì tôi muốn làm là, chỉ thay thế None s trong cột ab, nhưng không phải c.

Cách tốt nhất để làm điều này là gì?

Trả lời

54

Bạn có thể chọn các cột của bạn mong muốn và làm điều đó bằng cách chuyển nhượng:

df[['a', 'b']] = df[['a','b']].fillna(value=0) 

Sản lượng kết quả được như mong đợi:

 a b c 
0 1.0 4.0 NaN 
1 2.0 5.0 NaN 
2 3.0 0.0 7.0 
3 0.0 6.0 8.0 
+0

Vâng, đây chính xác là những gì tôi muốn! Cảm ơn bạn. Bất kỳ cách nào để làm điều này tại chỗ? Dataframe ban đầu của tôi là khá lớn. – Sait

+1

Tôi không nghĩ rằng có bất kỳ hiệu suất đạt được bằng cách làm điều này tại chỗ như bạn đang ghi đè lên orig df anyway – EdChum

+2

loc là thừa ở đây, 'df [['a', 'b']] = df [[' a ',' b ']]. fillna (giá trị = 0) 'sẽ vẫn hoạt động – EdChum

12

Bạn có thể sử dụng dict, fillna với giá trị khác nhau cho cột khác nhau

df.fillna({'a':0,'b':0}) 
Out[829]: 
    a b c 
0 1.0 4.0 NaN 
1 2.0 5.0 NaN 
2 3.0 0.0 7.0 
3 0.0 6.0 8.0 

Sau khi gán lại

df=df.fillna({'a':0,'b':0}) 
df 
Out[831]: 
    a b c 
0 1.0 4.0 NaN 
1 2.0 5.0 NaN 
2 3.0 0.0 7.0 
3 0.0 6.0 8.0 
Các vấn đề liên quan