Pandas 庫之 DataFrame


How to use DataFrame ?

簡介 分布式數據集(常用於數據分析)
創建 DataFrame
查看與篩選數據行列選取
DataFrame 數據操作增刪改

一、About DataFrame

  DataFrame 是 Python 中 Pandas 庫中的一種數據結構,是一種二維表。它類似 excel,或許說它可能有點像 matlab 的矩陣,但是 matlab 的矩陣只能放數值型值(當然 matlab 也可以用 cell 存放多類型數據),DataFrame 的單元格可以存放數值、字符串等,這就和 excel 表很像。

  同時 DataFrame 可以設置列名 columns 與行名 index,可以通過像 matlab 一樣通過位置獲取數據也可以通過列名和行名定位。

 

二、創建 DataFrame

版本聲明:Python 3.6.7

import pandas as pd
import numpy as np  # pandas 常與 numpy 一起配合使用

如果還沒安裝直接在 cmd 里 pip 安裝:

> pip install pandas > pip install numpy

1、直接創建

  可以直接使用 pandas 的 DataFrame 函數創建,比如隨機創建一個 4*4 的 DataFrame:

  np.random.randn(4,4):存放在DataFrame里的數據

  index=list('ABCD'):行名(或者可以說是索引)

  columns=list('ABCD'):列名

  后兩個參數可以使用 list 輸入,但是注意,這個list的長度要和 DataFrame 的大小匹配,不然會報錯。當然,這兩個參數是可選的,你可以選擇不設置。而且發現,這兩個list是可以一樣的,但是每行每列的名字在 index 或 columns 里要是唯一的

  小數據量,手工鍵入數據:

df2 = pd.DataFrame([[1,2,3,4],[2,3,4,5], [3,4,5,6],[4,5,6,7]], index=(['r1','r2','r3','r4']), columns=(['c1','c2','c3','c4']))

2、使用字典創建

  使用 DataFrame 方法,但是字典的每個 key 的 value 代表一列,而 key 是這一列的列名:

 

三、查看與篩選數據

1、查看列的數據類型:使用 dtypes 方法可以查看各列的數據類型

2、查看DataFrame的頭尾

  使用 head 可以查看前幾行的數據,默認的是前5行,不過也可以自己設置;

  使用 tail 可以查看后幾行的數據,默認也是5行,參數可以自己設置;

3、查看行名與列名

  使用 index 查看行名,columns 查看列名

In [6]: df3.dtypes Out[6]: name object age int64 gender object dtype: object In [7]: df3.head(1) Out[7]: name age gender 0 張三 18 男 In [8]: df3.tail(1) Out[8]: name age gender 2   王五   22 男 In [9]: df3.index Out[9]: RangeIndex(start=0, stop=3, step=1) In [10]: df3.columns Out[10]: Index(['name', 'age', 'gender'], dtype='object')

4、查看數據值

  使用 values 可以查看 DataFrame 里的數據值,返回的是一個數組:

# 查看所有的數據值
In [11]: df3.values Out[11]: array([['張三', 18, ''], ['李四', 20, ''], ['王五', 22, '']], dtype=object) # 查看某一列所有的數據值
In [12]: df3['name'].values Out[12]: array(['張三', '李四', '王五'], dtype=object)

  使用 loc 或者 iloc (切片)查看數據值,區別是 loc 是根據行名,iloc 是根據數字索引:

  ①loc:(location),works on labels in the index,只能使用字符型標簽來索引數據,不能使用數字來索引數據,不過有特殊情況,當數據框dataframe的行標簽或者列標簽為數字,loc就可以來其來索引。

  ②iloc:(i=integer),works on the positions in the index (so it only takes integers),主要使用數字來索引數據,而不能使用字符型的標簽來索引數據。

In [13]: df3.loc[1] Out[13]: name 李四 age 20 gender 女 Name: 1, dtype: object In [14]: df3.iloc[1] Out[14]: name 李四 age 20 gender 女 Name: 1, dtype: object

5、查看行列數:使用 shape 查看行列數,注意:參數為0 表示查看行數,參數為1 表示查看列數。

6、DataFrame 數據格式的行列選取

import numpy as np import pandas as pd data = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w']       #選擇表格中的'w'列,使用類字典屬性,返回的是Series類型
 data.w    #選擇表格中的'w'列,使用點屬性,返回的是Series類型
 data[['w']]      #選擇表格中的'w'列,返回的是DataFrame屬性
 data[['w','z']]  #選擇表格中的'w'、'z'列
 data[0:2]        #返回第1行到第2行的所有行,前閉后開,包括前不包括后
 data[1:2]        #返回第2行,從0計,返回的是單行,通過有前后值的索引形式,
                 #如果采用data[1]則報錯
 data.ix[1:2]     #(deprecated)返回第2行的第三種方法,返回的是DataFrame,跟data[1:2]同
 data['a':'b']    #利用index值進行切片,返回的是**前閉后閉**的DataFrame, 
                 #即末端是包含的 
data.irow(0)     #(deprecated)取data的第一行
data.icol(0)     #(deprecated)取data的第一列
 data.head() #返回data的前幾行數據,默認為前五行,需要前十行則dta.head(10)
data.tail()      #返回data的后幾行數據,默認為后五行,需要后十行則data.tail(10)
 data.iloc[-1]      #選取DataFrame最后一行,返回的是Series
data.iloc[-1:]     #選取DataFrame最后一行,返回的是DataFrame
 data.loc['a',['w','x']]   #返回‘a’行'w'、'x'列,這種用於選取行索引列索引已知
 data.iat[1,1]             #選取第二行第二列,用於已知行、列位置的選取

 

四、DataFrame 數據操作

1、轉置:直接字母T,這就有點 線性代數 的味道了哈

2、描述性統計

  使用 describe 方法可以對數據根據“列”進行描述性統計:

In [15]: df3.describe() Out[15]: age count 3.0 mean 20.0 std 2.0 min 18.0
25%    19.0
50%    20.0
75%    21.0 max 22.0

  由上可以看出,如果有的列是非數值型的,那么就跳過不會進行統計;如果想對行進行描述性統計,可以靈活處理一下:轉置后進行 describe

3、計算

  使用 sum 默認對每“列”求和,sum(1) 為對每“行”求和:

In [16]: df3.sum()        # 列求和
Out[16]: name 張三李四王五 # 如果元素是字符串,使用sum也會加起來(字符串拼接)
age           60 gender 男女男 dtype: object In [17]: df3.sum(1)       # 行求和
Out[17]: 0 18                   # 行中,如果有字符串有數值,則只計算數值
1    20
2    22 dtype: int64

  數乘運算使用 apply(應用 lambda 實現)

In [18]: df2 Out[18]: c1 c2 c3 c4 r1 1   2   3   4 r2 2   3   4   5 r3 3   4   5   6 r4 4   5   6   7 In [19]: df2.apply(lambda x:x*2) Out[19]: c1 c2 c3 c4 r1 2   4   6   8 r2 4   6   8  10 r3 6   8  10  12 r4 8  10  12  14

  如果元素是字符串,則會把字符串再重復一遍。

  乘方運算跟 matlab 類似,直接使用兩個 *,乘方運算如果有元素是字符串的話,就會報錯。

4、增刪改

In [36]: df2 Out[36]: c1 c2 c3 c4 r1 1   2   3   4 r2 2   3   4   5 r3 3   4   5   6 r4 4   5   6   7

# 1.增
In [37]: df2['c5'] = 8                      # 創建新列並賦值(統一值)
 In [38]: df2 Out[38]: c1 c2 c3 c4 c5 r1 1   2   3   4   8 r2 2   3   4   5   8 r3 3   4   5   6   8 r4 4   5   6   7   8 In [39]: df2.insert(0,'c0',[9, 9, 9, 9])    # 使用 insert 方法可以指定把列插入到第幾列,其他的列順延
 In [40]: df2 Out[40]: c0 c1 c2 c3 c4 c5 r1 9   1   2   3   4   8 r2 9   2   3   4   5   8 r3 9   3   4   5   6   8 r4 9   4   5   6   7   8

# 2.刪
In [41]: del df2['c0'] In [42]: df2 Out[42]: c1 c2 c3 c4 c5 r1 1   2   3   4   8 r2 2   3   4   5   8 r3 3   4   5   6   8 r4 4   5   6   7   8 In [43]: df2.drop('c1',axis=1)    # 使用 drop() 方法刪除
Out[43]: c2 c3 c4 c5 r1 2   3   4   8 r2 3   4   5   8 r3 4   5   6   8 r4 5   6   7   8 In [44]: df2                      # 用 drop 刪除時,刪的是視圖,並沒有真正刪除
Out[44]: c1 c2 c3 c4 c5 r1 1   2   3   4   8 r2 2   3   4   5   8 r3 3   4   5   6   8 r4 4   5   6   7   8

    # dorp()可以通過axis(行:axis=0 ,列:axis=1)可以控制刪除行或列,默認是行
    # dorp()可以同時刪除多行或多列,如 df2.drop(['c1','c2'], axis=1)

# 3.改
In [45]: df2['c5']['r3'] = 99 In [46]: df2 Out[46]: c1 c2 c3 c4 c5 r1 1   2   3   4   8 r2 2   3   4   5   8 r3 3   4   5   6  99 r4 4   5   6   7   8

5、合並拼接

  使用 join 可以將兩個 DataFrame 合並,但只根據行列名合並,並且以作用的那個 DataFrame 的為基准。

  但是,join 這個方法還有 how 這個參數可以設置,合並兩個 DataFrame 的交集或並集。參數為 'inner' 表示交集,'outer' 表示並集。

  如果要合並多個 Dataframe,可以用 list 把幾個 Dataframe 裝起來,然后使用 concat 轉化為一個新的 Dataframe。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM