處理丟失數(shù)據(jù)
有兩種丟失數(shù)據(jù):
- 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不能參與到任何計(jì)算中。
object類型的運(yùn)算要比int類型的運(yùn)算慢得多
計(jì)算不同數(shù)據(jù)類型求和時(shí)間
%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是浮點(diǎn)類型,能參與到計(jì)算中。但計(jì)算的結(jié)果總是NaN。
但可以使用np.nan*()函數(shù)來計(jì)算nan,此時(shí)視nan為0。
3. pandas中的None與NaN
1) pandas中None與np.nan都視作np.nan
創(chuàng)建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數(shù)據(jù)
2) pandas中None與np.nan的操作
-
isnull()
-
notnull()
-
dropna()
: 過濾丟失數(shù)據(jù) -
fillna()
: 填充丟失數(shù)據(jù)
(1)判斷函數(shù)
-
isnull()
-
notnull()
# 根據(jù)獲得的數(shù)據(jù)去除原來數(shù)據(jù)的空數(shù)據(jù)
s1
=
df
.
isnull
()
.
any
(
axis
=
1
)
# 有了s1這個(gè)數(shù)據(jù),可以獲得哪些數(shù)據(jù)為空
df
[
s1
]
# 保留非空數(shù)據(jù)
# .all()判斷軸中所有數(shù)據(jù)都不為空,返回True
s2
=
df
.
notnull
()
.
all
(
axis
=
1
)
df
[
s2
]
(2) 過濾函數(shù)
-
dropna()
可以選擇過濾的是行還是列(默認(rèn)為行)
df
.
dropna
()
df
.
dropna
(
axis
=
1
)
也可以選擇過濾的方式 how = 'all',一行中所有數(shù)據(jù)為空才刪除
df
.
dropna
(
how
=
'all'
)
df
.
loc
[
'張三'
]
=
np
.
nan
df
df
.
dropna
(
how
=
'all'
)
(3) 填充函數(shù) Series/DataFrame
-
fillna()
# 對(duì)多有的空數(shù)據(jù)進(jìn)行替換
df
.
fillna
(
value
=
'Java'
)
可以選擇前向填充還是后向填充
df
.
fillna
(
method
=
'bfill'
)
df
.
fillna
(
method
=
'ffill'
)
對(duì)于DataFrame來說,還要選擇填充的軸axis。記住,對(duì)于DataFrame來說:
- axis=0:index/行
- axis=1:columns/列
#{'backfill', 'bfill', 'pad', 'ffill'
df
.
fillna
(
method
=
'ffill'
)
============================================
練習(xí)7:
-
簡(jiǎn)述None與NaN的區(qū)別
-
假設(shè)張三李四參加模擬考試,但張三因?yàn)橥蝗幌朊靼兹松艞壛擞⒄Z考試,因此記為None,請(qǐng)據(jù)此創(chuàng)建一個(gè)DataFrame,命名為ddd3
-
老師決定根據(jù)用數(shù)學(xué)的分?jǐn)?shù)填充張三的英語成績(jī),如何實(shí)現(xiàn)? 用李四的英語成績(jī)填充張三的英語成績(jī)?
============================================
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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