處理丟失數據
有兩種丟失數據:
- None
- np.nan(NaN)
import
numpy
as
np
%
timeit np.arange(0,10000,dtype=int).sum()
%
timeit np.arange(0,10000,dtype=float).sum()
%
timeit np.arange(0,10000,dtype=object).sum()
1. None
None是Python自帶的,其類型為python object。因此,None不能參與到任何計算中。
object類型的運算要比int類型的運算慢得多
計算不同數據類型求和時間
%timeit np.arange(1e5,dtype=xxx).sum()
%
timeit np.arange(1e5,dtype=int).sum()
%
timeit np.arange(1e5,dtype=float).sum()
%
timeit np.arange(1e5,dtype=object).sum()
2. np.nan(NaN)
np.nan是浮點類型,能參與到計算中。但計算的結果總是NaN。
但可以使用np.nan*()函數來計算nan,此時視nan為0。
3. pandas中的None與NaN
1) pandas中None與np.nan都視作np.nan
創建DataFrame
import
pandas
as
pd
from
pandas
import
Series
,
DataFrame
df
=
DataFrame
({
'age'
:[
20
,
21
,
23
,
19
,
22
],
'salary'
:[
10000
,
11000
,
9900
,
8500
,
15000
]},
index
=
[
'張三'
,
'李四'
,
'小昭'
,
'小郭'
,
'小齊'
],
columns
=
[
'age'
,
'salary'
,
'work'
])
df
df
.
work
[
'李四'
:
'小郭'
]
=
'python'
df
使用DataFrame行索引與列索引修改DataFrame數據
2) pandas中None與np.nan的操作
-
isnull()
-
notnull()
-
dropna()
: 過濾丟失數據 -
fillna()
: 填充丟失數據
(1)判斷函數
-
isnull()
-
notnull()
# 根據獲得的數據去除原來數據的空數據
s1
=
df
.
isnull
()
.
any
(
axis
=
1
)
# 有了s1這個數據,可以獲得哪些數據為空
df
[
s1
]
# 保留非空數據
# .all()判斷軸中所有數據都不為空,返回True
s2
=
df
.
notnull
()
.
all
(
axis
=
1
)
df
[
s2
]
(2) 過濾函數
-
dropna()
可以選擇過濾的是行還是列(默認為行)
df
.
dropna
()
df
.
dropna
(
axis
=
1
)
也可以選擇過濾的方式 how = 'all',一行中所有數據為空才刪除
df
.
dropna
(
how
=
'all'
)
df
.
loc
[
'張三'
]
=
np
.
nan
df
df
.
dropna
(
how
=
'all'
)
(3) 填充函數 Series/DataFrame
-
fillna()
# 對多有的空數據進行替換
df
.
fillna
(
value
=
'Java'
)
可以選擇前向填充還是后向填充
df
.
fillna
(
method
=
'bfill'
)
df
.
fillna
(
method
=
'ffill'
)
對于DataFrame來說,還要選擇填充的軸axis。記住,對于DataFrame來說:
- axis=0:index/行
- axis=1:columns/列
#{'backfill', 'bfill', 'pad', 'ffill'
df
.
fillna
(
method
=
'ffill'
)
============================================
練習7:
-
簡述None與NaN的區別
-
假設張三李四參加模擬考試,但張三因為突然想明白人生放棄了英語考試,因此記為None,請據此創建一個DataFrame,命名為ddd3
-
老師決定根據用數學的分數填充張三的英語成績,如何實現? 用李四的英語成績填充張三的英語成績?
============================================
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
