一卖漫、隔行(上下行)之間的計(jì)算
1麸祷、shift( )方法,將數(shù)據(jù)先移到同一行现诀,再進(jìn)行計(jì)算
df = pd.DataFrame(np.array([[10,24,13,5,8], [4,10,9,16,2], [17,20,16,19,6]]).reshape(5,3),columns=['a', 'b', 'c'])
df['diff'] = df['c'].shift() - df['c']
df
返回結(jié)果如圖:
shift函數(shù)原型:
df.shift(periods=1, freq=None, axis=0, fill_value=None)
其中:
periods:類型為int,表示移動(dòng)的幅度履肃,可以是正數(shù)仔沿,也可以是負(fù)數(shù),默認(rèn)值是1,1就表示移動(dòng)一次尺棋,注意這里移動(dòng)的都是數(shù)據(jù)封锉,而索引是不移動(dòng)的,移動(dòng)之后沒(méi)有對(duì)應(yīng)值的膘螟,就賦值為NaN
freq: DateOffset, timedelta, or time rule string成福,可選參數(shù),默認(rèn)值為None荆残,只適用于時(shí)間序列奴艾,如果這個(gè)參數(shù)存在,那么會(huì)按照參數(shù)值移動(dòng)時(shí)間索引内斯,而數(shù)據(jù)值沒(méi)有發(fā)生變化
axis:{0, 1, ‘index’, ‘columns’}蕴潦,表示移動(dòng)的方向像啼,如果是0或者’index’表示上下移動(dòng),如果是1或者’columns’潭苞,則會(huì)左右移動(dòng)
fill_value:移位后產(chǎn)生的空值是否填充忽冻,默認(rèn)為np.nan
2.diff()方法, diff函數(shù)是用來(lái)將數(shù)據(jù)進(jìn)行某種移動(dòng)之后與原數(shù)據(jù)進(jìn)行比較得出的差異數(shù)據(jù)
df = pd.DataFrame(np.array([[10,24,13,5,8], [4,10,9,16,2], [17,20,16,19,6]]).reshape(5,3),columns=['a', 'b', 'c'])
df.diff()
返回結(jié)果如圖:
diff()函數(shù)原型:
DataFrame.diff(periods=1, axis=0)
其中:
periods:移動(dòng)的幅度此疹,int類型甚颂,默認(rèn)值為1。
axis:移動(dòng)的方向秀菱,{0 or ‘index’, 1 or ‘columns’}振诬,如果為0或者’index’,則上下移動(dòng)衍菱,如果為1或者’columns’赶么,則左右移動(dòng)。
二脊串、Dataframe和Series 的類型區(qū)別
三辫呻、Dataframe 、Series琼锋、Python列表的排序:sort_index() 和sort_values()方法放闺,sort()sorted()方法
1、按值排序
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=’quicksort’, na_position=’last’)
-
參數(shù)
image.png
df.sort_values([‘class’,‘score’],ascending=[1,0],inplace=True)
- 返回:
sorted_obj : DataFrame
2缕坎、按索引排序
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind=’quicksort’,na_position=’last’, sort_remaining=True, by=None)
-
參數(shù)
image.png - 返回
sorted_obj : DataFrame
3怖侦、選取排序后的值
DataFrame.nlargest(n, columns, keep=’first’)
DataFrame.nsmallest(n, columns[, keep])
-
參數(shù)
image.png
3、python 列表排序方法sort谜叹、sorted
Python list內(nèi)置sort()方法用來(lái)排序匾寝,也可以用python內(nèi)置的全局sorted()方法來(lái)對(duì)可迭代的序列排序生成新的序列。
1)排序基礎(chǔ)
簡(jiǎn)單的升序排序是非常容易的荷腊。只需要調(diào)用sorted()方法艳悔。它返回一個(gè)新的list,新的list的元素基于小于運(yùn)算符(lt)來(lái)排序女仰。
sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
也可以使用list.sort()方法來(lái)排序猜年,此時(shí)list本身將被修改。通常此方法不如sorted()方便疾忍,但是如果不需要保留原來(lái)的list乔外,此方法將更有效。
>>> a = [5, 2, 3, 1, 4]
>>> a.sort()
>>> a
[1, 2, 3, 4, 5]
另一個(gè)不同就是list.sort()方法僅被定義在list中锭碳,相反地sorted()方法對(duì)所有的可迭代序列都有效袁稽。
>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
[1, 2, 3, 4, 5]
2)key參數(shù)/函數(shù)
從python2.4開(kāi)始勿璃,list.sort()和sorted()函數(shù)增加了key參數(shù)來(lái)指定一個(gè)函數(shù)擒抛,此函數(shù)將在每個(gè)元素比較前被調(diào)用推汽。 例如通過(guò)key指定的函數(shù)來(lái)忽略字符串的大小寫(xiě):
>>> sorted("This is a test string from Andrew".split(), key=str.lower)
['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']
key參數(shù)的值為一個(gè)函數(shù),此函數(shù)只有一個(gè)參數(shù)且返回一個(gè)值用來(lái)進(jìn)行比較歧沪。這個(gè)方法很快速歹撒,因?yàn)閗ey指定的函數(shù)將準(zhǔn)確地對(duì)每個(gè)元素調(diào)用。
更廣泛的使用情況是用復(fù)雜對(duì)象的某些值來(lái)對(duì)復(fù)雜對(duì)象的序列排序诊胞,例如:
>>> student_tuples = [
('john', 'A', 15),
('jane', 'B', 12),
('dave', 'B', 10),
]
>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
3)Operator 模塊函數(shù)
上面的key參數(shù)的使用非常廣泛暖夭,因此python提供了一些方便的函數(shù)來(lái)使得訪問(wèn)方法更加容易和快速。operator模塊有itemgetter撵孤,attrgetter迈着,從2.6開(kāi)始還增加了methodcaller方法。使用這些方法邪码,上面的操作將變得更加簡(jiǎn)潔和快速:
>>> from operator import itemgetter, attrgetter
>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
operator模塊還允許多級(jí)的排序裕菠,例如,先以grade闭专,然后再以age來(lái)排序:
>>> sorted(student_tuples, key=itemgetter(1,2))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
>>> sorted(student_objects, key=attrgetter('grade', 'age'))
[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]
這個(gè)功能相當(dāng)于DataFrame的排序函數(shù)里參數(shù)‘by’指定的內(nèi)容奴潘,即通過(guò)什么原則進(jìn)行排序
4)升序和降序
list.sort()和sorted()都接受一個(gè)參數(shù)reverse(True or False)來(lái)表示升序或降序排序。例如對(duì)上面的student降序排序如下:
>>> sorted(student_tuples, key=itemgetter(2), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(student_objects, key=attrgetter('age'), reverse=True)
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
四影钉、通過(guò)Python操作將數(shù)據(jù)寫(xiě)入MySQL之to_sql()方法解析
DataFrame.to_sql (name画髓,con,schema = None平委,if_exists ='fail'奈虾,index = True,index_label = None廉赔,chunksize = None愚墓,dtype = None )
to_sql()將存儲(chǔ)在DataFrame中的記錄寫(xiě)入SQL數(shù)據(jù)庫(kù)。支持SQLAlchemy支持的數(shù)據(jù)庫(kù)昂勉±瞬幔可以新創(chuàng)建,附加或覆蓋表岗照。