在學(xué)習(xí)自動(dòng)化辦公的時(shí)候,我們可能會(huì)涉及到一些數(shù)據(jù)的操作,比如說將某個(gè)表格區(qū)域的數(shù)據(jù)進(jìn)行上下左右的移動(dòng),但我們只是空有這樣的想法卻不知道怎么實(shí)現(xiàn)。實(shí)際上我們在學(xué)習(xí)自動(dòng)化辦公的時(shí)候會(huì)學(xué)習(xí)到一個(gè)python庫叫做pandas,pandas可以進(jìn)行數(shù)據(jù)的移動(dòng)操作。那么pandas如何操作數(shù)據(jù)呢?且聽小編娓娓道來。
操作
pandas DataFrame.shift()函數(shù)可以把數(shù)據(jù)移動(dòng)指定的位數(shù)
period參數(shù)指定移動(dòng)的步幅,可以為正為負(fù).axis指定移動(dòng)的軸,1為行,0為列.
eg: 有這樣一個(gè)DataFrame數(shù)據(jù):
import pandas as pd
data1 = pd.DataFrame({
'a': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
'b': [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
})
print data1
a b
0 0 9
1 1 8
2 2 7
3 3 6
4 4 5
5 5 4
6 6 3
7 7 2
8 8 1
9 9 0
如果想讓 a和b的數(shù)據(jù)都往下移動(dòng)一位:
data2 = data1.shift(axis=0)
print data2
a b
0 NaN NaN
1 0.0 9.0
2 1.0 8.0
3 2.0 7.0
4 3.0 6.0
5 4.0 5.0
6 5.0 4.0
7 6.0 3.0
8 7.0 2.0
9 8.0 1.0
如果是在行上往右移動(dòng)一位:
data3 = data1.shift(axis=1)
print data3
a b
0 NaN 0.0
1 NaN 1.0
2 NaN 2.0
3 NaN 3.0
4 NaN 4.0
5 NaN 5.0
6 NaN 6.0
7 NaN 7.0
8 NaN 8.0
9 NaN 9.0
如果想往上或者往左移動(dòng),可以指定(periods=-1):
data4 = data1.shift(periods=-1, axis=0)
print data4
a b
0 1.0 8.0
1 2.0 7.0
2 3.0 6.0
3 4.0 5.0
4 5.0 4.0
5 6.0 3.0
6 7.0 2.0
7 8.0 1.0
8 9.0 0.0
9 NaN NaN
一個(gè)例子:
這里有一組某車站各個(gè)小時(shí)的總進(jìn)站人數(shù)和總出站人數(shù)的數(shù)據(jù):
entries_and_exits = pd.DataFrame({
'ENTRIESn': [3144312, 3144335, 3144353, 3144424, 3144594,
3144808, 3144895, 3144905, 3144941, 3145094],
'EXITSn': [1088151, 1088159, 1088177, 1088231, 1088275,
1088317, 1088328, 1088331, 1088420, 1088753]
})
要求計(jì)算每個(gè)小時(shí)該車站進(jìn)出站人數(shù)
思路: 把第n+1小時(shí)的總?cè)藬?shù)-第n小時(shí)的總?cè)藬?shù),就是這個(gè)小時(shí)里的進(jìn)出站人數(shù)
entries_and_exits_hourly = entries_and_exits - entries_and_exits.shift(axis=0)print(entries_and_exits_hourly.fillna(0)) #最后用0來填補(bǔ)NaN
ENTRIESn EXITSn
0 0.0 0.0
1 23.0 8.0
2 18.0 18.0
3 71.0 54.0
4 170.0 44.0
5 214.0 42.0
6 87.0 11.0
7 10.0 3.0
8 36.0 89.0
9 153.0 333.0
小結(jié)
到此這篇關(guān)于pandas如何移動(dòng)數(shù)據(jù)的文章就介紹到這了。更多相關(guān)pandas 的使用方法介紹請搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章。希望大家以后多多支持W3Cschool!