前面我們用pandas做了一些基本的操作,接下來進一步了解數(shù)據(jù)的操作,
數(shù)據(jù)清洗一直是數(shù)據(jù)分析中極為重要的一個環(huán)節(jié)。
數(shù)據(jù)合并
在pandas中可以通過merge對數(shù)據(jù)進行合并操作。
import numpy as np
import pandas as pd
data1 = pd.DataFrame({'level':['a','b','c','d'],
'numeber':[1,3,5,7]})
data2=pd.DataFrame({'level':['a','b','c','e'],
'numeber':[2,3,6,10]})
print(data1)
結(jié)果為:

print(data2)
結(jié)果為:

print(pd.merge(data1,data2))
結(jié)果為:

可以看到data1和data2中用于相同標簽的字段顯示,而其他字段則被舍棄,這相當于SQL中做inner join連接操作。
此外還有outer,ringt,left等連接方式,用關(guān)鍵詞how的進行表示。
data3 = pd.DataFrame({'level1':['a','b','c','d'],
'numeber1':[1,3,5,7]})
data4=pd.DataFrame({'level2':['a','b','c','e'],
'numeber2':[2,3,6,10]})
print(pd.merge(data3,data4,left_on='level1',right_on='level2'))
結(jié)果為:

兩個數(shù)據(jù)框中如果列名不同的情況下,我們可以通過指定letf_on 和right_on兩個參數(shù)把數(shù)據(jù)連接在一起
print(pd.merge(data3,data4,left_on='level1',right_on='level2',how='left'))
結(jié)果為:

其他詳細參數(shù)說明

重疊數(shù)據(jù)合并
有時候我們會遇到重疊數(shù)據(jù)需要進行合并處理,此時可以用comebine_first函數(shù)。
data3 = pd.DataFrame({'level':['a','b','c','d'],
'numeber1':[1,3,5,np.nan]})
data4=pd.DataFrame({'level':['a','b','c','e'],
'numeber2':[2,np.nan,6,10]})
print(data3.combine_first(data4))
結(jié)果為:

可以看到相同標簽下的內(nèi)容優(yōu)先顯示data3的內(nèi)容,如果一個數(shù)據(jù)框中的某一個數(shù)據(jù)是缺失的,此時另外一個數(shù)據(jù)框中的元素就會補上
這里的用法類似于np.where(isnull(a),b,a)
數(shù)據(jù)重塑和軸向旋轉(zhuǎn)
這個內(nèi)容我們在上一篇pandas文章有提到過。數(shù)據(jù)重塑主要使用reshape函數(shù),旋轉(zhuǎn)主要使用unstack和stack兩個函數(shù)。
data=pd.DataFrame(np.arange(12).reshape(3,4),
columns=['a','b','c','d'],
index=['wang','li','zhang'])
print(data)
結(jié)果為:

print(data.unstack())
結(jié)果為:

數(shù)據(jù)轉(zhuǎn)換
刪除重復行數(shù)據(jù)
data=pd.DataFrame({'a':[1,3,3,4],
'b':[1,3,3,5]})
print(data)
結(jié)果為:

print(data.duplicated())
結(jié)果為:

可以看出第三行是重復第二行的數(shù)據(jù)所以,顯示結(jié)果為True
另外用drop_duplicates方法可以去除重復行
print(data.drop_duplicates())
結(jié)果為:

替換值
除了使用我們上一篇文章中提到的fillna的方法外,還可以用replace方法,而且更簡單快捷
data=pd.DataFrame({'a':[1,3,3,4],
'b':[1,3,3,5]})
|