python:dataframe
相關:Series一些函數用法
目錄
- DataFrame
- reindex
- drop
- loc和iloc
- apply
- 排序
- 匯總統計和計算
- 缺失值處理
- 數據合并
- 數據轉換:對數據的過濾、清理以及其他的轉換操作
DataFrame
性質:一個表格型的數據結構。它提供有序的列和不同類型的列值。
from pandas import DataFrame## 創建DataFrame ##In [0]: DataFrame({'col0':[1,2,3], 'col1':[4,5,6]}) Out[0]: col0 col1 0 1 4 1 2 5 2 3 6In [1]: data = {'col0':[1,2,3], 'col1':[4,5,6]} DataFrame(data,columns = ['col1','col0']) Out[1]: col1 col0 0 4 1 1 5 2 2 6 3In [2]: DataFrame(data,columns = ['col1','col0','col2']) Out[2]: col1 col0 col2 0 4 1 NaN 1 5 2 NaN 2 6 3 NaN## 獲取數據 ## frame = DataFrame({'col0':[1,2,3], 'col1':[4,5,6]})?In [3]: frame['col1'] Out[3]: 0 4 1 5 2 6 Name: col1, dtype: int64In [4]: frame.col1 Out[4]: 0 4 1 5 2 6 Name: col1, dtype: int64## 刪除數據 ## del frame['col1']In [5]: frame Out[5]: col0 0 1 1 2 2 3reindex
dataframe可以對index或者column使用reindex方法
#DataFrame使用reindex方法 import numpy as np frame = DataFrame(np.arange(9).reshape((3, 3)), index = ['a', 'c', 'd'], columns = ['Ohio', 'Texas', 'California']) frame 輸出:Ohio Texas California a 0 1 2 c 3 4 5 d 6 7 8frame2 = frame.reindex(['a', 'b', 'c', 'd']) frame2 輸出: Ohio Texas California a 0.0 1.0 2.0 b NaN NaN NaN c 3.0 4.0 5.0 d 6.0 7.0 8.0states = ['Texas', 'Utah', 'California'] frame.reindex(columns = states) 輸出:Texas Utah California a 1 NaN 2 c 4 NaN 5 d 7 NaN 8#對DataFrame使用ffill方法,書里的寫法會報錯,用如下寫法是沒問題的 frame.reindex(index = ['a', 'b', 'c', 'd'], columns = states).ffill() 輸出:Texas Utah California a 1.0 NaN 2.0 b 1.0 NaN 2.0 c 4.0 NaN 5.0 d 7.0 NaN 8.0drop
loc和iloc
loc是指location的意思,iloc中的i是指integer。這兩者的區別如下:
loc works on labels in the index.
iloc works on the positions in the index (so it only takes integers)
也就是說loc是根據index來索引,
如上table定義了一個index,那么loc就根據這個index來索引對應的行。
iloc是根據行號來索引,行號從0開始,逐次加1。
loc和iloc的對比:
df = DataFrame(np.arange(15).reshape((5, 3)), index = ['a', 'c', 'd', 'b', 'e'], columns = ['Ohio', 'Texas', 'California']) df輸出:Ohio Texas California a 0 1 2 c 3 4 5 d 6 7 8 b 9 10 11 e 12 13 14df.loc['a':'b'] 輸出:Ohio Texas California a 0 1 2 c 3 4 5 d 6 7 8 b 9 10 11df.iloc[0:3] 輸出Ohio Texas California a 0 1 2 c 3 4 5 d 6 7 8df.iloc['a':'b'] 輸出 報錯df.loc[0:3] 輸出 報錯loc的一些用法:
df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],index=['cobra', 'viper', 'sidewinder'],columns=['max_speed', 'shield']) df 輸出max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8df.loc['viper'] # 輸出為Seies 輸出 max_speed 4 shield 5 Name: viper, dtype: int64df.loc[['viper']] # 輸出為DataFrame 輸出max_speed shield viper 4 5>>> df.loc['cobra', 'shield'] 2>>> df.loc['cobra':'viper', 'max_speed'] cobra 1 viper 4 Name: max_speed, dtype: int64>>> df.loc[[False, False, True]]max_speed shield sidewinder 7 8>>> df.loc[df['shield'] > 6]max_speed shield sidewinder 7 8>>> df.loc[df['shield'] > 6, ['max_speed']]max_speed sidewinder 7>>> df.loc[lambda df: df['shield'] == 8]max_speed shield sidewinder 7 8# 對選中的元素設置值 >>> df.loc[['viper', 'sidewinder'], ['shield']] = 50 >>> dfmax_speed shield cobra 1 2 viper 4 50 sidewinder 7 50# 對整行設置值 >>> df.loc['cobra'] = 10 >>> dfmax_speed shield cobra 10 10 viper 4 50 sidewinder 7 50# 對整列設置值 >>> df.loc[:, 'max_speed'] = 30 >>> dfmax_speed shield cobra 30 10 viper 30 50 sidewinder 30 50# 對滿足條件的行設置值 >>> df.loc[df['shield'] > 35] = 0 >>> dfmax_speed shield cobra 30 10 viper 0 0 sidewinder 0 0iloc的一些用法:
df.iloc[0] # 輸出是一個Series 輸出 Ohio 0 Texas 1 California 2 Name: a, dtype: int32df.iloc[[0]] # 輸出是DataFrame 輸出Ohio Texas California a 0 1 2df.iloc[[1, 4], [0, 2]] 輸出 Ohio California c 3 5 e 12 14df.iloc[1:3, 0:3] 輸出Ohio Texas California c 3 4 5 d 6 7 8apply
#函數應用和映射 import numpy as np import pandas as pd df=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['utah','ohio','texas','oregon']) print(df) """b d e utah -0.667969 1.974801 0.738890 ohio -0.896774 -0.790914 0.474183 texas 0.043476 0.890176 -0.662676 oregon 0.701109 -2.238288 -0.154442 """#將函數應用到由各列或行形成的一維數組上。DataFrame的apply方法可以實現此功能 f=lambda x:x.max()-x.min() #默認情況下會以列為單位,分別對列應用函數 t1=df.apply(f) print(t1) t2=df.apply(f,axis=1) print(t2)""" b 1.597883 d 4.213089 e 1.401566 dtype: float64 utah 2.642770 ohio 1.370957 texas 1.552852 oregon 2.939397 dtype: float64 """#除標量外,傳遞給apply的函數還可以返回由多個值組成的Series def f(x):return pd.Series([x.min(),x.max()],index=['min','max']) t3=df.apply(f) #從運行的結果可以看出,按列調用的順序,調用函數運行的結果在右邊依次追加 print(t3)"""b d e min -0.896774 -2.238288 -0.662676 max 0.701109 1.974801 0.738890 """#元素級的python函數,將函數應用到每一個元素 #將DataFrame中的各個浮點值保留兩位小數 f=lambda x: '%.2f'%x t3=df.applymap(f) print(t3) """b d e utah -0.67 1.97 0.74 ohio -0.90 -0.79 0.47 texas 0.04 0.89 -0.66 oregon 0.70 -2.24 -0.15 """#注意,之所以這里用map,是因為Series有一個元素級函數的map方法。而dataframe只有applymap。 t4=df['e'].map(f) print(t4)""" utah 0.74 ohio 0.47 texas -0.66 oregon -0.15 """排序
##### DataFrame按引索引/列索引排序, # 默認axis=0,行索引排序 # axis=1,列索引排序 frame = DataFrame(np.random.randn(4, 3), columns=list('dbe'),index=['Ut', 'Oh', 'Tex', 'Ore']) 輸出d b e Ut 1.343094 -0.593928 0.428803 Oh -0.834637 -0.942729 1.095775 Tex 0.358518 -0.048092 1.330677 Ore -0.562642 -0.176548 -0.551305frame.sort_index() # 默認按行升序排序 輸出d b e Oh -0.834637 -0.942729 1.095775 Ore -0.562642 -0.176548 -0.551305 Tex 0.358518 -0.048092 1.330677 Ut 1.343094 -0.593928 0.428803frame.sort_index(ascending=False) 輸出d b e Ut 1.343094 -0.593928 0.428803 Tex 0.358518 -0.048092 1.330677 Ore -0.562642 -0.176548 -0.551305 Oh -0.834637 -0.942729 1.095775frame.sort_index(axis=1) 輸出b d e Ut -0.593928 1.343094 0.428803 Oh -0.942729 -0.834637 1.095775 Tex -0.048092 0.358518 1.330677 Ore -0.176548 -0.562642 -0.551305frame.sort_index(axis=1, ascending=False) 輸出e d b Ut 0.428803 1.343094 -0.593928 Oh 1.095775 -0.834637 -0.942729 Tex 1.330677 0.358518 -0.048092 Ore -0.551305 -0.562642 -0.176548##### DataFrame按列排序 frame = DataFrame({'a': [1, 3, 1, 5], 'b': [2, 1, 4, 6]}) frame 輸出a b 0 1 2 1 3 1 2 1 4 3 5 6# sort_values方法 frame.sort_values(by=['a', 'b'], ascending=[True, True]) 輸出a b 0 1 2 2 1 4 1 3 1 3 5 6frame.sort_values(by=['a', 'b'], ascending=[True, False]) 輸出a b 2 1 4 0 1 2 1 3 1 3 5 6匯總統計和計算
df = DataFrame(np.arange(15).reshape((5, 3)), index = ['a', 'c', 'd', 'b', 'e'], columns = ['Ohio', 'Texas', 'California']) df 輸出Ohio Texas California a 0 1 2 c 3 4 5 d 6 7 8 b 9 10 11 e 12 13 14df.sum() 輸出 Ohio 30 Texas 35 California 40 dtype: int64df.sum(axis = 1) 輸出 a 3 c 12 d 21 b 30 e 39 dtype: int64df.cumsum() # 縱向匯總_累計匯總 輸出Ohio Texas California a 0 1 2 c 3 5 7 d 9 12 15 b 18 22 26 e 30 35 40df.max() # 獲取每列最大值 輸出 Ohio 12 Texas 13 California 14 dtype: int32df.max() # 獲取每行最大值 輸出 a 2 c 5 d 8 b 11 e 14 dtype: int32df.idxmax() # 獲取每列最大值對應的索引 輸出 Ohio e Texas e California e dtype: objectdf.idxmax(axis = 1) # 獲取每行最大值對應的索引 輸出 a California c California d California b California e California dtype: object缺失值處理
df = DataFrame(np.arange(15).reshape((5, 3)), index = ['a', 'c', 'd', 'b', 'e'], columns = ['Ohio', 'Texas', 'California']) df.iloc[[1],[1]] = None df 輸出Ohio Texas California a 0 1.0 2 c 3 NaN 5 d 6 7.0 8 b 9 10.0 11 e 12 13.0 14df.dropna() 輸出Ohio Texas California a 0 1.0 2 d 6 7.0 8 b 9 10.0 11 e 12 13.0 14df.iloc[[2]] = None df 輸出Ohio Texas California a 0.0 1.0 2.0 c 3.0 NaN 5.0 d NaN NaN NaN b 9.0 10.0 11.0 e 12.0 13.0 14.0df.dropna(how='all') 輸出Ohio Texas California a 0 1.0 2 c 3 NaN 5 d 6 7.0 8 b 9 10.0 11 e 12 13.0 14數據合并
a)pandas.merge():數據庫風格的合并
b)pandas.concat()方法:軸向連接,即沿著一條軸將多個對象堆疊到一起
pd.concat([s1,s2,s3]) #默認concat在豎軸(axis=0)上連接,即產生新的Series。
數據轉換:對數據的過濾、清理以及其他的轉換操作
替換值
data.replace(value,np.nan)
data.replace([value1, value2],[ np.nan,0])
重命名軸索引
data.rename(index=str.title,columns=str.upper)
參考:
Python之DataFrame常用方法小結
Python學習筆記(6):Pandas的reindex方法
Python中的lambda和apply用法
python學習筆記—DataFrame和Series的排序
總結
以上是生活随笔為你收集整理的python:dataframe的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python:series一些函数用法
- 下一篇: python,pycharm,anaco