簡體   English   中英

如何從python中填充NaN值?

[英]How to fill NaN values from in python?

均值圖表:

interval        gross(mean)
(1920, 1925]    NaN
(1925, 1930]    3.443000e+06
(1930, 1935]    4.746000e+05
(1935, 1940]    2.011249e+06

我有一個巨大的dataframe(df),在總列中有一些Nan值。現在,我想根據各自的間隔從平均值圖表中填充這些Nan值。

df:

name gross interval
 k    1000   (1935, 1940]
 l     Nan   (1950, 1955]

、、、

這里的間隔是分類索引。

您可以使用平均值圖表將一列帶有相應平均值的數據pd.merge添加到數據pd.merge (可以通過在interval列上進行連接使用pd.merge進行左連接)。 擁有此列后,您可以使用-

df['gross'].fillna(df['means'])

您可以通過map創建新的Series ,然后用combine_first替換NaN

主要優點是沒有必要的輔助列,以后有必要將其刪除。

df1=pd.DataFrame({'gross(mean)':[np.nan,3.443000e+06, 4.746000e+05, 2.011249e+06, 10,20,30],
                   'interval':[1922,1927,1932, 1938,1932,1938,1953]})
df1['interval'] = pd.cut(df1['interval'], bins=[1920,1925,1930,1935,1940,1945,1950,1955])
print (df1)
   gross(mean)      interval
0          NaN  (1920, 1925]
1    3443000.0  (1925, 1930]
2     474600.0  (1930, 1935]
3    2011249.0  (1935, 1940]
4         10.0  (1930, 1935]
5         20.0  (1935, 1940]
6         30.0  (1950, 1955]

df = pd.DataFrame({'name':['k','l'],
                   'gross':[1000, np.nan],
                   'interval':[1938, 1952]}, columns=['name','gross','interval'])
df['interval'] = pd.cut(df['interval'], bins=[1925,1930,1935,1940,1945,1950,1955])
print (df)
  name   gross      interval
0    k  1000.0  (1935, 1940]
1    l     NaN  (1950, 1955]

mapped = df['interval'].map(df1.set_index('interval')['gross(mean)'].to_dict())
print (mapped)
0    20.0
1    30.0
Name: interval, dtype: float64
df['gross'] = df['gross'].combine_first(mapped)
print (df)
  name   gross      interval
0    k  1000.0  (1935, 1940]
1    l    30.0  (1950, 1955]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM