小白學 Python 數據分析(5):Pandas (四)基礎操做(1)查看數據

在家爲國家作貢獻太無聊,不如跟我一塊兒學點 Pythonhtml

人生苦短,我用 Pythonpython

前文傳送門:git

小白學 Python 數據分析(1):數據分析基礎github

小白學 Python 數據分析(2):Pandas (一)概述數據結構

小白學 Python 數據分析(3):Pandas (二)數據結構 Seriesdom

小白學 Python 數據分析(4):Pandas (三)數據結構 DataFrame學習

引言

最近這個系列有段時間沒更新,理由也就不找了,總結就一點,懶!懶得學習!ui

我就是這麼一個能敢於發現而且認可錯誤的人。spa

不過從這篇開始,我又恢復更新了,手動滑稽一下:)翻譯

接下來小編要分享一些 Pandas 的基礎操做,可能會有些無聊,不過仍是但願有興趣的同窗能對照着代碼本身動手敲一下。

閒話很少聊,下面開始正題。

查看數據

前面的兩篇內容中,咱們介紹了 Pandas 的兩種數據結構,本篇的內容將主要介紹一些有關於 DataFrame 的查找操做,畢竟 DataFrame 是一個二維相似於表同樣的數據結構,咱們平時會更多的使用 DataFrame 。

首先第一部仍是導入 Pandas 與 NumPy ,而且要生成一個 DataFrame ,這裏小編就簡單的使用隨機數的形式進行生成,代碼以下:

import numpy as np
import pandas as pd

dates = pd.date_range('20200101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))

print(df)複製代碼

這裏最後咱們打印了一下這個生成的 DataFrame ,結果以下:

A         B         C         D
2020-01-01  0.177499 -0.025693  0.182894 -1.123577
2020-01-02  1.067580  1.592576 -0.010205 -0.349342
2020-01-03  1.141218  1.032333  1.364477  0.851630
2020-01-04  0.920260 -0.243247  0.196369 -0.835655
2020-01-05 -0.729184 -0.235706  1.144007 -1.048619
2020-01-06 -0.480888 -0.995325 -0.283726  0.428644複製代碼

以上咱們的準備工做就完成了,已經構建了一個隨機產生的 DataFrame ,接下來咱們看一些簡單的取值操做。

首先第一個是從頭部開始取值,這裏使用到的方法是 head() ,好比如今須要取出上面這個 df 中第一行的數據,那咱們能夠這麼寫:

# 查看頭部數據
print(df.head(1))複製代碼

結果以下:

A         B         C         D
2020-01-01  0.177499 -0.025693  0.182894 -1.123577複製代碼

既然有從頭部取數那麼必定會有從尾部取數,這個方法是 tail() ,用法和上面的同樣,這裏咱們從尾部取出兩行的數據,以下:

# 查看尾部數據
print(df.tail(2))複製代碼

結果以下:

A         B         C         D
2020-01-05 -0.729184 -0.235706  1.144007 -1.048619
2020-01-06 -0.480888 -0.995325 -0.283726  0.428644複製代碼

對照看以前的 df ,能夠看到計算機成功完成了咱們的目標。

接下來,咱們獲取這個 df 的索引,這裏能夠用到的方法是 index ,以下:

# 獲取索引
print(df.index)複製代碼

結果以下:

DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
               '2020-01-05', '2020-01-06'],
              dtype='datetime64[ns]', freq='D')複製代碼

能獲取索引那麼就必定能獲取全部的列名,這個方法你們可能都猜到了,就是 columns ,沒毛病, Pandas 的命名仍是很友好的,直接就是英文翻譯,多的我這裏就不吐槽了,命名不規範的代碼常常性的會形成他人的誤解,因此建議各位儘可能命名規範一點:

# 獲取列名
print(df.columns)複製代碼

結果以下:

Index(['A', 'B', 'C', 'D'], dtype='object')複製代碼

這裏 Pandas 還爲咱們提供了一個很 NB 的方法,就是直接快速查看數據的統計摘要,這個方法是 describe() ,這個方法可讓咱們簡單的知道一個咱們不清楚內容的 DataFrame 裏面具體內容,以下:

# 查看數據的統計摘要
print(df.describe())複製代碼

結果以下:

A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.349414  0.187490  0.432303 -0.346153
std    0.818647  0.948383  0.663604  0.821275
min   -0.729184 -0.995325 -0.283726 -1.123577
25%   -0.316291 -0.241362  0.038070 -0.995378
50%    0.548879 -0.130700  0.189632 -0.592498
75%    1.030750  0.767826  0.907098  0.234148
max    1.141218  1.592576  1.364477  0.851630複製代碼

這裏的數據統計的挺全乎的,包括了數據量、均值、方差、最大值、最小值等。

小編這裏邪惡的想,若是在上中學考試的時候有這玩意,就不再須要用手在草稿紙上一個一個去作重複的體力勞動了。

Pandas 還爲咱們提供了一個神奇的功能,「轉置數據」,就是把行列互換,示例以下:

# 轉置數據
print(df.T)複製代碼

結果以下:

2020-01-01  2020-01-02  2020-01-03  2020-01-04  2020-01-05  2020-01-06
A    0.177499    1.067580    1.141218    0.920260   -0.729184   -0.480888
B   -0.025693    1.592576    1.032333   -0.243247   -0.235706   -0.995325
C    0.182894   -0.010205    1.364477    0.196369    1.144007   -0.283726
D   -1.123577   -0.349342    0.851630   -0.835655   -1.048619    0.428644複製代碼

是否是很神奇,不太小編以爲並沒有什麼實際用處。

咱們在實際的應用場景中,常常會遇到排序的需求, Pandas 爲咱們提供了兩個方法, sort_index()sort_values()

爲了便於演示,小編這裏從新構造了一個亂序的 DataFrame ,以下:

df1 = pd.DataFrame({'b' :[1,2,3,2],'a':[4,3,2,1],'c':[1,3,8,2]},index=[2,0,1,3])
print(df1)複製代碼

結果以下:

b  a  c
2  1  4  1
0  2  3  3
1  3  2  8
3  2  1  2複製代碼

能夠看到,這個 df1 從索引和列名上看順序都是亂序的,接下來咱們開始對這個 df1 進行排序,首先咱們先使用 sort_values()

sort_values()

用途:既能夠根據列數據,也可根據行數據排序。

注意:必須指定by參數,即必須指定哪幾行或哪幾列;沒法根據 index 和 columns 排序(由 sort_index() 執行)

語法:DataFrame.sortvalues(by, axis=0, ascending=True, inplace=False, kind='quicksort', naposition='last')

  • axis:{0 or ‘index’, 1 or ‘columns’}, default 0,默認按照列排序,即縱向排序;若是爲1,則是橫向排序。
  • by:str or list of str;若是axis=0,那麼by="列名";若是axis=1,那麼by="行名"。
  • ascending:布爾型,True則升序,若是by=['列名1','列名2'],則該參數能夠是[True, False],即第一字段升序,第二個降序。
  • inplace:布爾型,是否用排序後的數據框替換現有的數據框。
  • kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。彷佛不用太關心。
  • na_position:{‘first’, ‘last’}, default ‘last’,默認缺失值排在最後面。

按 b 列升序排序:

# 按 b 列升序排序
print(df1.sort_values(by='b'))複製代碼

結果以下:

b  a  c
2  1  4  1
0  2  3  3
3  2  1  2
1  3  2  8複製代碼

先按 b 列降序,再按 a 列升序排序:

# 先按 b 列降序,再按 a 列升序排序
print(df1.sort_values(by=['b','a'],axis=0,ascending=[False,True]))複製代碼

結果以下:

b  a  c
1  3  2  8
3  2  1  2
0  2  3  3
2  1  4  1複製代碼

按行 3 升序排列,必須指定 axis = 1

# 按行 3 升序排列,必須指定 axis = 1
print(df1.sort_values(by=3,axis=1))複製代碼

結果以下:

a  b  c
2  4  1  1
0  3  2  3
1  2  3  8
3  1  2  2複製代碼

按行 3 升序,行 0 降排列:

# 按行 3 升序,行 0 降排列
print(df1.sort_values(by=[3,0],axis=1,ascending=[True,False]))複製代碼

結果以下:

a  c  b
2  4  1  1
0  3  3  2
1  2  8  3
3  1  2  2複製代碼

sort_index()

用途:默認根據行標籤對全部行排序,或根據列標籤對全部列排序,或根據指定某列或某幾列對行排序。

注意:df.sort_index() 能夠完成和 df.sort_values() 徹底相同的功能,但 python 更推薦用只用 df.sort_index() 對 index 和 columns 排序,其餘排序方式用 df.sort_values()

語法:DataFrame.sortindex(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', naposition='last', sort_remaining=True, by=None)

  • axis:0 按照行名排序;1 按照列名排序。
  • level:默認 None ,不然按照給定的 level 順序排列。
  • ascending:默認 True 升序排列; False 降序排列。
  • inplace:默認False,不然排序以後的數據直接替換原來的數據框。
  • kind:排序方法,{‘quicksort’, ‘mergesort’, ‘heapsort’}, default ‘quicksort’。彷佛不用太關心。
  • na_position:缺失值默認排在最後{"first","last"}。
  • by:按照某一列或幾列數據進行排序,可是by參數貌似不建議使用。

默認按「行標籤」升序排列:

# 默認按「行標籤」升序排列
print(df1.sort_index())複製代碼

結果以下:

b  a  c
0  2  3  3
1  3  2  8
2  1  4  1
3  2  1  2複製代碼

按「列標籤」升序排列:

# 按「列標籤」升序排列
print(df1.sort_index(axis=1))複製代碼

結果以下:

a  b  c
2  4  1  1
0  3  2  3
1  2  3  8
3  1  2  2複製代碼

還有兩個按列排序的例子:

# 先按 b 列「降序」排列,由於 b 列中有相同值,相同值再按 a 列的「升序」排列
print(df1.sort_index(by=['b','a'],ascending=[False,True]))
# 先按 a 列「降序」排列,而 a 列中沒有相同值,所以這裏按 b 列的「升序」排列不起做用。
print(df1.sort_index(by=['a','b'],ascending=[False,True]))複製代碼

結果以下:

b  a  c
2  1  4  1
3  2  1  2
0  2  3  3
1  3  2  8
   b  a  c
2  1  4  1
0  2  3  3
1  3  2  8
3  2  1  2複製代碼

雖然正常排序,可是程序運行後也出現了警告,以下:

FutureWarning: by argument to sort_index is deprecated, please use .sort_values(by=...)複製代碼

這個警告的意思是不推薦咱們使用 sort_index() 使用 by 這個參數,推薦咱們使用 sort_values() 這個方法。

示例代碼

老規矩,全部的示例代碼都會上傳至代碼管理倉庫 Github 和 Gitee 上,方便你們取用。

示例代碼-Github

示例代碼-Gitee

參考

https://www.pypandas.cn/docs/getting_started/10min.html

https://www.jianshu.com/p/f0ed06cd5003

若是個人文章對您有幫助,請掃碼關注下做者的公衆號:獲取最新干貨推送:)
相關文章
相關標籤/搜索