Pandas

Pandas

安裝

pip install pandas

import pandas as pd

Series

類似於一維數組的對象,由一組數據和一組與之相關的數據標籤(索引)組成

創建方式

  • pd.Series([4,7,-5,3]),列表或者數組都行

  • pd.Series([4,7,-5,3],index=[‘a’,’b’,’c’,’d’]) 設置索引標籤

  • pd.Series({‘a’:1,’b’:2}

  • pd.Series(0,index=[‘a’,’b’,’c’,’d’])

獲取值數組和索引數組:values屬性和index屬性

比較像數組和字典的結合體

使用特性

  • 運算和numpy的array是一樣的

  • 切片和列表一樣,可以通過索引標籤來切片

  • 支援numpy的通用函數

  • 支援布爾索引

  • 可以使用字典創建Series對象

  • 遍歷列印的是值而不是鍵,這是和dict的區別

整數索引

sr = Series(np.range(20))
sr2 = sr[10:].copy() 
>> 10   10
11  11
12  12
13  13
14  14
15  15
16  16
17  17
18  18
19  19
sr2.loc[10] # 以標籤為整數10作為索引
>> 10
sr2.iloc[10]    # 以下標為整數10作為索引
>> 19

注意:下標和標籤是不一樣的,所以使用整數作為索引要使用iloc

數據對齊

pandas在進行兩個Series對象的運算時,會按索引標籤進行對其然後計算,一般index是去重的

sr1 = pd.Series([1,2,3],index=['c','a','d'])
sr2 = pd.Series([4,5,6,9],index=['d','c','a','b'])
sr1 + sr2
>>
a   8   # 2+6
b   NaN
c   6   # 1+5
d   7   # 4+3
sr1.add(sr2,fill_vlue=0)
a   8   
b   9   # 9+0
c   6   
d   7

缺失數據處理

  1. 刪掉缺失數據:

    1. sr.[sr.notnull()]

    2. sr.dropna()

  2. 為缺失數據賦值0

    1. sr.fillna(0)

    2. 若想保存則sr = sr.fillna(0)

  3. 為缺失數據賦值平均數

    1. sr.fillna(sr.mean())

DataFrame

是一個表格型的數據結構,含有一組有序的列。可以看作是由Series組成的字典,並且共用一個索引

創建方式

  1. pd.DataFrame({‘one’:[1,2,3],’two’:[2,3,4]})

  2. pd.DataFrame({‘one’:pd.Series([1,2,3],index=[‘a’,’b’,’c’]),’two’:pd.Series([2,3,4,5],index=[‘a’,’b’,’c’,’d’])})

csv文件讀取與寫入

  1. df.read_csv(‘file_nam.csv’)

  2. df.to_csv()

常用屬性

屬性 描述
index 獲取索引
T 轉置
columns 獲取列索引
values 獲取值數組
describe() 獲取快速統計

索引和切片

  • df.loc[‘行索引’,’列索引’]

  • df.iloc[‘行索引’,’列索引’]

  • df.loc[花式索引,切片]

    • 例如:df.[[‘a’,’c’],:]

不要用兩個中括弧來索引

數據對齊

  • 在運算時,會進行數據對其,其行索引和列索引分別對其

缺失數據處理

  • dropna(axis=0,where=’any’,…)

    • df.dropna(how=’all’):這一行的值全為空則刪除

    • axis=0,是豎軸,刪行;axis=1,是橫軸,刪列

  • fillna()

  • isnull()

  • notnull()

其他常用方法

方法 描述
mean() axis=0,按列求平均值;axis=1,按行求平均值
sum() 求和
sort_index() 索引排序,有缺失值的排最後
sort_values(by=”,ascending=true) 值排序,有缺失值的排最後
Numpy的通用函數  

時間對象

  • import dateutil

    • dateutil.parser.parse(’02/03/2001′)

  • pd.to_datetime([‘2001-01-01′,’2010/Feb/02’]):轉成DatetimeIndex對象

時間對象生成

  • pd.date_range()

    • start:開始使勁按

    • end:結束時間

    • periods:長度

    • freq:頻率,默認’D’

      • H:hour

      • B:business

      • SM:semi month,半個月

      • T:minutes

      • S:second

      • W-Mon:每周一

      • 1h20:每1小時20分鐘

時間序列

以時間對象為索引的Series或DataFrame

例如:sr = pd.Series(np.arange(1000),index=pd.date_range(‘2021-01-01’,periods=1000))

datetime對象作為索引時存儲在Datetimeimdex對象中

特殊功能:

  • 傳入」年「或」年-月「作為切片

  • 傳入日期範圍作為切片方式

  • 豐富的函數支援:resample(),truncate()…

    • sr.resample(‘M’).sum():求每月的和

文件處理

常用文件格式:csv

讀取文件

pandas讀取文件:從文件名、URL、文件對象中載入數據

  • read_csv 默認分隔符為逗號

    • pd.read_csv(‘file_name.csv’,index_col=’date’,parse_dates=True):指定date列變成時間對象

    • 會默認把第一行作為列名

  • read_table 默認分隔符為製表符

  • 主要參數

    • sep:指定分隔符

    • header:指定文件無列名

    • name:指定列名

    • index_col:指定某列作為所引

    • skip_row:指定跳過某些行

    • na_values:指定某些字元串表示缺失值

    • parse_dates:指定某些列是否被解析為日期,類型為布爾值或列表

  • 還有:read_json(),read_html(),read_excel(),read_sql()

    • read_excel()需要安裝xlrd的包

寫入文件

寫入到csv文件:to_csv函數

主要參數:

  • sep:指定分隔符

  • header=False:不輸出列名行

  • index=False:不輸出行索引列

  • na_rep:指定缺失值轉換的字元串,默認為空字元串

  • columns:指定輸出的列,傳入列表

還有:to_json(),to_html(),to_excel(),to_sql()