1. 程式人生 > >pandas 學習彙總7 - 缺失資料( tcy)

pandas 學習彙總7 - 缺失資料( tcy)

缺少資料  2018/12/3
# 用np.nan表示缺失資料。預設不包含在計算中 
dates=pd.date_range('2018-12-02',periods=4)
df=pd.DataFrame(np.random.random((4,3)) ,index=dates,columns=list('ABC'))

# 例項1:重建索引允許您更改/新增/刪除指定軸上的索引。這將返回資料的副本。
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['D'])
df1.loc[dates[0]:dates[1],'D'] = 1
df1
'''
A B C D 
2018-12-02 0.468678 0.238657 0.402742 1.0
2018-12-03 0.915191 0.171935 0.883892 1.0
2018-12-04 0.191612 0.743375 0.649796 NaN
2018-12-05 0.355307 0.101217 0.159055 NaN
'''
# 例項2:刪除任何缺少資料的行 
df.dropna() #刪除任意缺失資料
df.dropna(axis='columns')#刪除列至少有一個na
df.dropna(how='all') #刪除行當行全部資料為na
df.dropna(thresh=2) #刪除行至少有2個na
df.dropna(subset=['B', 'A'])#在那些A,B列中查詢缺失值
df.dropna(inplace=True) #刪除行後就地修改
df1.dropna(axis=1) #刪除D列
df1.dropna(how='any')
'''
A B C D
2018-12-02 0.468678 0.238657 0.402742 1.0
2018-12-03 0.915191 0.171935 0.883892 1.0
'''
# 例項3:填寫缺失的資料
df.fillna(0) #用0填充
df.fillna(method='ffill') #向前填充
df.fillna(method='bfill') #向後填充
df.fillna(value={'A': 0, 'B': 1, 'C': 2, 'D': 3})#不同值填充
df.fillna(value=values, limit=1) #限制填充1個

df1.fillna(value=-1)
''' 
A B C D
2018-12-02 0.468678 0.238657 0.402742 1.0
2018-12-03 0.915191 0.171935 0.883892 1.0
2018-12-04 0.191612 0.743375 0.649796 -1.0
2018-12-05 0.355307 0.101217 0.159055 -1.0
  # 例項4:獲取值所在的布林掩碼nan 
pd.isna(df1['D'])
#df1['D'].isna() # 等價
# pd.isnull(df1['D']) # 等價
pd.notnull(df1)
'''''''''
A B C D
2018-12-02 True True True True
2018-12-03 True True True True
2018-12-04 True True True False
2018-12-05 True True True False
''' 

# 例項5.1:替換丟失(或)通用值 

df.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')
s.replace(0, 5) #用5替換0
df.replace(0, 5)#用5替換0
df.replace([0, 1, 2, 3], 4) # 用4替換0,1,2,3,4
df.replace([0, 1, 2, 3], [4, 3, 2, 1])# 4,3,2,1分別替換0,1,2,3
s.replace([1, 2], method='bfill') # 後項替換即用3替換1,2
df.replace({0: 10, 1: 100}) # 10替換0,100替換1
df.replace({'A': 0, 'B': 5}, 100) # A列0,B列5都用100替換
df.replace({'A': {0: 100, 4: 400}}) # A列0被100替換,4被400替換

df = pd.DataFrame({'one':[10,20,30,40,50,2000],'two':[1000,0,30,40,50,60]})
df.replace({1:10,2000:60,30:-30,40:-40})
'''''''''
one two
0 10 10
1 20 0
2 -30 -30
3 -40 -40
4 50 50
5 60 60
''' 

 # 例項5.2:正則表示式替換

df = pd.DataFrame({'A': ['bat', 'foo', 'bait'],'B': ['abc', 'bar', 'xyz']})

df.replace(to_replace=r'^ba.$', value='new', regex=True)#結果同下
df.replace(regex=r'^ba.$', value='new')
''''''''' 
A B
0 new abc
1 foo new
2 bait xyz
'''
df.replace({'A': r'^ba.$'}, {'A': 'new'}, regex=True)
'''''''''
A B
0 new abc
1 foo bar
2 bait xyz
'''
df.replace(regex={r'^ba.$':'new', 'foo':'xyz'})
'''''''''
A B
0 new abc
1 xyz new
2 bait xyz
'''
df.replace(regex=[r'^ba.$', 'foo'], value='new')
'''''''''
A B
0 new abc
1 new new
2 bait xyz
'''