日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pandas之:Pandas简洁教程

發布時間:2024/2/28 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas之:Pandas简洁教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 簡介
  • 對象創建
  • 查看數據
  • 選擇數據
    • loc和iloc
    • 布爾索引
  • 處理缺失數據
  • 合并
  • 分組

簡介

pandas是建立在Python編程語言之上的一種快速,強大,靈活且易于使用的開源數據分析和處理工具,它含有使數據清洗和分析?作變得更快更簡單的數據結構和操作?具。pandas經常和其它?具?同使?,如數值計算?具NumPy和SciPy,分析庫statsmodels和scikit-learn,和數據可視化庫matplotlib等。

pandas是基于NumPy數組構建的,雖然pandas采?了?量的NumPy編碼?格,但?者最?的不同是pandas是專?為處理表格和混雜數據設計的。?NumPy更適合處理統?的數值數組數據。

本文是關于Pandas的簡潔教程。

對象創建

因為Pandas是基于NumPy數組來構建的,所以我們在引用的時候需要同時引用Pandas和NumPy:

In [1]: import numpy as npIn [2]: import pandas as pd

Pandas中最主要的兩個數據結構是Series和DataFrame。

Series和一維數組很相似,它是由NumPy的各種數據類型來組成的,同時還包含了和這組數據相關的index。

我們來看一個Series的例子:

In [3]: pd.Series([1, 3, 5, 6, 8]) Out[3]: 0 1 1 3 2 5 3 6 4 8 dtype: int64

左邊的是索引,右邊的是值。因為我們在創建Series的時候并沒有指定index,所以index是從0開始到n-1結束。

Series在創建的時候還可以傳入np.nan表示空值:

In [4]: pd.Series([1, 3, 5, np.nan, 6, 8]) Out[4]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64

DataFrame是?個表格型的數據結構,它含有?組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)。

DataFrame既有?索引也有列索引,它可以被看做由Series組成的字典(共?同?個索引)。

看一個創建DataFrame的例子:

In [5]: dates = pd.date_range('20201201', periods=6)In [6]: dates Out[6]: DatetimeIndex(['2020-12-01', '2020-12-02', '2020-12-03', '2020-12-04','2020-12-05', '2020-12-06'],dtype='datetime64[ns]', freq='D')

上面我們創建了一個index的list。

然后使用這個index來創建一個DataFrame:

In [7]: pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD')) Out[7]:A B C D 2020-12-01 1.536312 -0.318095 -0.737956 0.143352 2020-12-02 1.325221 0.065641 -2.763370 -0.130511 2020-12-03 -1.143560 -0.805807 0.174722 0.427027 2020-12-04 -0.724206 0.050155 -0.648675 -0.645166 2020-12-05 0.182411 0.956385 0.349465 -0.484040 2020-12-06 1.857108 1.245928 -0.767316 -1.890586

上面的DataFrame接收三個參數,第一個參數是DataFrame的表格數據,第二個參數是index的值,也可以看做是行名,第三個參數是列名。

還可以直接傳入一個字典來創建一個DataFrame:

In [9]: pd.DataFrame({'A': 1.,...: 'B': pd.Timestamp('20201202'),...: 'C': pd.Series(1, index=list(range(4)), dtype='float32'),...: 'D': np.array([3] * 4, dtype='int32'),...: 'E': pd.Categorical(["test", "train", "test", "train"]),...: 'F': 'foo'})...: Out[9]:A B C D E F 0 1.0 2020-12-02 1.0 3 test foo 1 1.0 2020-12-02 1.0 3 train foo 2 1.0 2020-12-02 1.0 3 test foo 3 1.0 2020-12-02 1.0 3 train foo

上面的DataFrame中,每個列都有不同的數據類型。

我們用個圖片來更好的理解DataFrame和Series:

它就像是Excel中的表格,帶有行頭和列頭。

DataFrame中的每一列都可以看做是一個Series:

查看數據

創建好Series和DataFrame之后,我們就可以查看他們的數據了。

Series可以通過index和values來獲取其索引和值信息:

In [10]: data1 = pd.Series([1, 3, 5, np.nan, 6, 8])In [12]: data1.index Out[12]: RangeIndex(start=0, stop=6, step=1)In [14]: data1.values Out[14]: array([ 1., 3., 5., nan, 6., 8.])

DataFrame可以看做是Series的集合,所以DataFrame帶有更多的屬性:

In [16]: df.head() Out[16]:A B C D 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 2020-12-03 0.610846 0.216937 0.821258 0.805818 2020-12-04 0.490105 0.732421 0.547129 -0.443274 2020-12-05 -0.475531 -0.853141 0.160017 0.986973In [17]: df.tail(3) Out[17]:A B C D 2020-12-04 0.490105 0.732421 0.547129 -0.443274 2020-12-05 -0.475531 -0.853141 0.160017 0.986973 2020-12-06 0.288091 -2.164323 0.193989 -0.197923

head跟tail分別取得DataFrame的頭幾行和尾部幾行。

同樣的DataFrame也有index和columns:

In [19]: df.index Out[19]: DatetimeIndex(['2020-12-01', '2020-12-02', '2020-12-03', '2020-12-04','2020-12-05', '2020-12-06'],dtype='datetime64[ns]', freq='D')In [20]: df.values Out[20]: array([[ 0.44624818, -0.0605494 , -0.44566462, -1.39250227],[-1.11974917, -1.65977552, -0.61865617, 1.97159943],[ 0.61084596, 0.2169369 , 0.82125808, 0.80581847],[ 0.49010504, 0.73242082, 0.54712889, -0.44327351],[-0.47553134, -0.85314134, 0.16001748, 0.98697257],[ 0.28809148, -2.16432292, 0.19398863, -0.19792266]])

describe方法可以對數據進行統計:

In [26]: df.describe() Out[26]:A B C D count 6.000000 6.000000 6.000000 6.000000 mean 0.040002 -0.631405 0.109679 0.288449 std 0.687872 1.128019 0.556099 1.198847 min -1.119749 -2.164323 -0.618656 -1.392502 25% -0.284626 -1.458117 -0.294244 -0.381936 50% 0.367170 -0.456845 0.177003 0.303948 75% 0.479141 0.147565 0.458844 0.941684 max 0.610846 0.732421 0.821258 1.971599

還可以對DataFrame進行轉置:

In [27]: df.T Out[27]:2020-12-01 2020-12-02 2020-12-03 2020-12-04 2020-12-05 2020-12-06 A 0.446248 -1.119749 0.610846 0.490105 -0.475531 0.288091 B -0.060549 -1.659776 0.216937 0.732421 -0.853141 -2.164323 C -0.445665 -0.618656 0.821258 0.547129 0.160017 0.193989 D -1.392502 1.971599 0.805818 -0.443274 0.986973 -0.197923

可以按行和按列進行排序:

In [28]: df.sort_index(axis=1, ascending=False) Out[28]:D C B A 2020-12-01 -1.392502 -0.445665 -0.060549 0.446248 2020-12-02 1.971599 -0.618656 -1.659776 -1.119749 2020-12-03 0.805818 0.821258 0.216937 0.610846 2020-12-04 -0.443274 0.547129 0.732421 0.490105 2020-12-05 0.986973 0.160017 -0.853141 -0.475531 2020-12-06 -0.197923 0.193989 -2.164323 0.288091In [29]: df.sort_values(by='B') Out[29]:A B C D 2020-12-06 0.288091 -2.164323 0.193989 -0.197923 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 2020-12-05 -0.475531 -0.853141 0.160017 0.986973 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 2020-12-03 0.610846 0.216937 0.821258 0.805818 2020-12-04 0.490105 0.732421 0.547129 -0.443274

選擇數據

通過DataFrame的列名,可以選擇代表列的Series:

In [30]: df['A'] Out[30]: 2020-12-01 0.446248 2020-12-02 -1.119749 2020-12-03 0.610846 2020-12-04 0.490105 2020-12-05 -0.475531 2020-12-06 0.288091 Freq: D, Name: A, dtype: float64

通過切片可以選擇行:

In [31]: df[0:3] Out[31]:A B C D 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 2020-12-03 0.610846 0.216937 0.821258 0.805818

或者這樣:

In [32]: df['20201202':'20201204'] Out[32]:A B C D 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 2020-12-03 0.610846 0.216937 0.821258 0.805818 2020-12-04 0.490105 0.732421 0.547129 -0.443274

loc和iloc

使用loc可以使用軸標簽來選取數據。

In [33]: df.loc[:, ['A', 'B']] Out[33]:A B 2020-12-01 0.446248 -0.060549 2020-12-02 -1.119749 -1.659776 2020-12-03 0.610846 0.216937 2020-12-04 0.490105 0.732421 2020-12-05 -0.475531 -0.853141 2020-12-06 0.288091 -2.164323

前面是行的選擇,后面是列的選擇。

還可以指定index的名字:

In [34]: df.loc['20201202':'20201204', ['A', 'B']] Out[34]:A B 2020-12-02 -1.119749 -1.659776 2020-12-03 0.610846 0.216937 2020-12-04 0.490105 0.732421

如果index的名字不是切片的話,將會給數據降維:

In [35]: df.loc['20201202', ['A', 'B']] Out[35]: A -1.119749 B -1.659776 Name: 2020-12-02 00:00:00, dtype: float64

如果后面列是一個常量的話,直接返回對應的值:

In [37]: df.loc['20201202', 'A'] Out[37]: -1.1197491665145112

iloc是根據值來選取數據,比如我們選擇第三行:

In [42]: df.iloc[3] Out[42]: A 0.490105 B 0.732421 C 0.547129 D -0.443274 Name: 2020-12-04 00:00:00, dtype: float64

它其實和df.loc[‘2020-12-04’]是等價的:

In [41]: df.loc['2020-12-04'] Out[41]: A 0.490105 B 0.732421 C 0.547129 D -0.443274 Name: 2020-12-04 00:00:00, dtype: float64

同樣可以傳入切片:

In [43]: df.iloc[3:5, 0:2] Out[43]:A B 2020-12-04 0.490105 0.732421 2020-12-05 -0.475531 -0.853141

可以傳入list:

In [44]: df.iloc[[1, 2, 4], [0, 2]] Out[44]:A C 2020-12-02 -1.119749 -0.618656 2020-12-03 0.610846 0.821258 2020-12-05 -0.475531 0.160017

取具體某個格子的值:

In [45]: df.iloc[1, 1] Out[45]: -1.6597755161871708

布爾索引

DataFrame還可以通過布爾值來進行索引,下面是找出列A中所有元素大于0的:

In [46]: df[df['A'] > 0] Out[46]:A B C D 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 2020-12-03 0.610846 0.216937 0.821258 0.805818 2020-12-04 0.490105 0.732421 0.547129 -0.443274 2020-12-06 0.288091 -2.164323 0.193989 -0.197923

或者找出整個DF中,值大于0的:

In [47]: df[df > 0] Out[47]:A B C D 2020-12-01 0.446248 NaN NaN NaN 2020-12-02 NaN NaN NaN 1.971599 2020-12-03 0.610846 0.216937 0.821258 0.805818 2020-12-04 0.490105 0.732421 0.547129 NaN 2020-12-05 NaN NaN 0.160017 0.986973 2020-12-06 0.288091 NaN 0.193989 NaN

可以給DF添加一列:

In [48]: df['E'] = ['one', 'one', 'two', 'three', 'four', 'three']In [49]: df Out[49]:A B C D E 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 one 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 one 2020-12-03 0.610846 0.216937 0.821258 0.805818 two 2020-12-04 0.490105 0.732421 0.547129 -0.443274 three 2020-12-05 -0.475531 -0.853141 0.160017 0.986973 four 2020-12-06 0.288091 -2.164323 0.193989 -0.197923 three

使用isin()來進行范圍值的判斷判斷:

In [50]: df[df['E'].isin(['two', 'four'])] Out[50]:A B C D E 2020-12-03 0.610846 0.216937 0.821258 0.805818 two 2020-12-05 -0.475531 -0.853141 0.160017 0.986973 four

處理缺失數據

現在我們的df有a,b,c,d,e這5列,如果我們再給他加一列f,那么f的初始值將會是NaN:

In [55]: df.reindex(columns=list(df.columns) + ['F']) Out[55]:A B C D E F 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 one NaN 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 one NaN 2020-12-03 0.610846 0.216937 0.821258 0.805818 two NaN 2020-12-04 0.490105 0.732421 0.547129 -0.443274 three NaN 2020-12-05 -0.475531 -0.853141 0.160017 0.986973 four NaN 2020-12-06 0.288091 -2.164323 0.193989 -0.197923 three NaN

我們給前面的兩個F賦值:

In [74]: df1.iloc[0:2,5]=1In [75]: df1 Out[75]:A B C D E F 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 one 1.0 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 one 1.0 2020-12-03 0.610846 0.216937 0.821258 0.805818 two NaN 2020-12-04 0.490105 0.732421 0.547129 -0.443274 three NaN 2020-12-05 -0.475531 -0.853141 0.160017 0.986973 four NaN 2020-12-06 0.288091 -2.164323 0.193989 -0.197923 three NaN

可以drop所有為NaN的行:

In [76]: df1.dropna(how='any') Out[76]:A B C D E F 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 one 1.0 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 one 1.0

可以填充NaN的值:

In [77]: df1.fillna(value=5) Out[77]:A B C D E F 2020-12-01 0.446248 -0.060549 -0.445665 -1.392502 one 1.0 2020-12-02 -1.119749 -1.659776 -0.618656 1.971599 one 1.0 2020-12-03 0.610846 0.216937 0.821258 0.805818 two 5.0 2020-12-04 0.490105 0.732421 0.547129 -0.443274 three 5.0 2020-12-05 -0.475531 -0.853141 0.160017 0.986973 four 5.0 2020-12-06 0.288091 -2.164323 0.193989 -0.197923 three 5.0

可以對值進行判斷:

In [78]: pd.isna(df1) Out[78]:A B C D E F 2020-12-01 False False False False False False 2020-12-02 False False False False False False 2020-12-03 False False False False False True 2020-12-04 False False False False False True 2020-12-05 False False False False False True 2020-12-06 False False False False False True

合并

DF可以使用Concat來合并多個df,我們先創建一個df:

In [79]: df = pd.DataFrame(np.random.randn(10, 4))In [80]: df Out[80]:0 1 2 3 0 1.089041 2.010142 -0.532527 0.991669 1 1.303678 -0.614206 -1.358952 0.006290 2 -2.663938 0.600209 -0.008845 -0.036900 3 0.863718 -0.450501 1.325427 0.417345 4 0.789239 -0.492630 0.873732 0.375941 5 0.327177 0.010719 -0.085967 -0.591267 6 -0.014350 1.372144 -0.688845 0.422701 7 -3.355685 0.044306 -0.979253 -2.184240 8 -0.051961 0.649734 1.156918 -0.233725 9 -0.692530 0.057805 -0.030565 0.209416

然后把DF拆成三部分:

In [81]: pieces = [df[:3], df[3:7], df[7:]]

最后把使用concat把他們合起來:

In [82]: pd.concat(pieces) Out[82]:0 1 2 3 0 1.089041 2.010142 -0.532527 0.991669 1 1.303678 -0.614206 -1.358952 0.006290 2 -2.663938 0.600209 -0.008845 -0.036900 3 0.863718 -0.450501 1.325427 0.417345 4 0.789239 -0.492630 0.873732 0.375941 5 0.327177 0.010719 -0.085967 -0.591267 6 -0.014350 1.372144 -0.688845 0.422701 7 -3.355685 0.044306 -0.979253 -2.184240 8 -0.051961 0.649734 1.156918 -0.233725 9 -0.692530 0.057805 -0.030565 0.209416

還可以使用join來進行類似SQL的合并:

In [83]: left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})In [84]: right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})In [85]: left Out[85]:key lval 0 foo 1 1 foo 2In [86]: right Out[86]:key rval 0 foo 4 1 foo 5In [87]: pd.merge(left, right, on='key') Out[87]:key lval rval 0 foo 1 4 1 foo 1 5 2 foo 2 4 3 foo 2 5

分組

先看上面的DF:

In [99]: df2 Out[99]:key lval rval 0 foo 1 4 1 foo 1 5 2 foo 2 4 3 foo 2 5

我們可以根據key來進行group,從而進行sum:

In [98]: df2.groupby('key').sum() Out[98]:lval rval key foo 6 18

group還可以按多個列進行:

In [100]: df2.groupby(['key','lval']).sum() Out[100]:rval key lval foo 1 92 9

本文已收錄于 http://www.flydean.com/01-python-pandas-overview/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!

總結

以上是生活随笔為你收集整理的Pandas之:Pandas简洁教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。