pandas使用

pandas簡介

一、pandas是一個強大的Python數據分析的工具包。
二、pandas是基於NumPy構建的。正則表達式

三、pandas的主要功能數據庫

  • 具有對其功能的數據結構DataFrame、Series
  • 集成時間序列功能
  • 提供豐富的數學運算和操做
  • 靈活處理缺失數據

四、安裝方法:pip install pandas
五、引用方法:import pandas as pdjson

Pandas之Series

series是一種一維數據結構,每個元素都帶有一個索引,與一維數組的含義類似,其中索引能夠爲數字或字符串。數組

建立

import pandas as pd
import numpy as np

pd.Series([1, 2, 3, 4])
pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
pd.Series({'a': 1, 'b': 2})
pd.Series(np.arange(5))

 

 

 

Series經常使用特性

In [8]: sr = pd.Series([1, 2, 3, 4])

In [9]: sr*2
Out[9]:
0    2
1    4
2    6
3    8
dtype: int64

In [10]: sr[sr>1] #布爾運算
Out[10]:
1    2
2    3
3    4
dtype: int64

In [11]: 3 in sr
Out[11]: True

In [12]: sr.sum() #求和
Out[12]: 10

In [13]: sr.mean() #求平均數
Out[13]: 2.5

In [14]: sr.index
Out[14]: RangeIndex(start=0, stop=4, step=1)

In [15]: sr.index=['a','b','c','d']

In [16]: sr
Out[16]:
a    1
b    2
c    3
d    4
dtype: int64

In [17]: sr.index #索引
Out[17]: Index(['a', 'b', 'c', 'd'], dtype='object')

In [18]: sr.values #值
Out[18]: array([1, 2, 3, 4], dtype=int64)

In [19]: sr.head() #前5列
Out[19]:
a    1
b    2
c    3
d    4
dtype: int64

 標籤索引

loc——經過行標籤索引行數據 
iloc——經過行號索引行數據 
ix——經過行標籤或者行號索引行數據(基於loc和iloc 的混合) 數據結構

In [20]: sr = pd.Series({'a': 1, 'b': 2})

In [21]: sr.loc['a']
Out[21]: 1

In [22]: sr.iloc[1]
Out[22]: 2

In [23]: sr.ix['b']
Out[23]: 2

In [24]: sr.ix[0]
Out[24]: 1

 

Series數據對齊

pandas在運算時,會按索引進行對齊而後計算。若是存在不一樣的索引,則結果的索引是兩個操做數索引的並集。
s1 = pd.Series([12, 23, 34], index=['c', 'a', 'd'])
s2 = pd.Series([11, 20, 10], index=['d', 'c', 'a'])
print(s1 + s2)  # 按索引相加

s2 = pd.Series([11, 20, 10], index=['b', 'c', 'a'])
print(s1 + s2)  # 按索引相加,出現Nan值

在兩個Series對象相加時將缺失值設爲0
s1.add(s2, fill_value=0)

 

 

 

缺失數據處理

print(sr.isnull())  # 等於NaN是True
print(sr.notnull())  # 不等於NaN是True
print(sr[sr.notnull()])  # 過濾空值
print(sr.dropna())  # 過濾空值
print(sr.fillna(0))  # 填充空值

 

 

 

 Pandas之DataFrame

DataFrame是一個表格型的數據結構,含有一組有序的列。
DataFrame能夠被看作是由Series組成的字典,而且共用一個索引app

 

 

 

建立方式及經常使用屬性

data = [[1, 2, 3], [4, 5, 6]]
index = ['x', 'y']
columns = ['a', 'b', 'c']
df = pd.DataFrame(data=data, index=index, columns=columns)

print(df.loc['x'])  # 指向x索引的行
print(df.iloc[1])  # 指向第二行
print(df.loc['x', 'a'])  # 指向x索引的行,a列
print(df.loc['x', ])  # 指向x索引的行,全部列

print(df.index)  # 行索引
print(df.columns)  # 列索引
print(df.T)  # 轉置
print(df.values)  # 值(二維數組)
print(df.describe())   # 每列的統計信息

 

 

 

 數據對齊與缺失數據

 

DataFrame對象在運算時,一樣會進行數據對齊,行索引與列索引分別對齊。
結果的行索引與列索引分別爲兩個操做數的行索引與列索引的並集。函數

DataFrame處理缺失數據的相關方法:工具

    • dropna(axis=0,where=‘any’,…) 過濾掉值爲NaN的行
    • fillna() 填充缺失數據
    • isnull() 返回布爾數組,缺失值對應爲True
    • notnull() 返回布爾數組,缺失值對應爲False
df = pd.DataFrame({'one': ['1', '2', np.NAN], 'two': ['a', np.NAN, np.NAN]})
print(df.fillna('0'))  # 填充全部帶有空的元素
print(df.dropna())  # 刪除全部帶有空的行
print(df.dropna(how='all'))  # 刪除全部每列都有空的行
df.loc[2, 'one'] = '3'  # 修改值
print(df)
print(df.dropna(axis=1))  # 刪除爲空值的列

 

 

 

pandas:經常使用方法 

- mean        #求平均值
- sum         #求和
- sort_index  #按行或列索引排序
- sort_values  #按值排序
- apply(func,axis=0)  #axis=0指的是逐行,axis=1指的是逐列。
        df.apply(lamada x:x.mean())  #按列求平均
        df.apply(lamada x:x['high']+x["low"])/2,axis=1)  #按列求平均(最高價和最低價的平均)
        df.apply(lamada x:x['high']+x["low"])/2,axis=1)  #按列求平均(最高價和最低價的平均)
- applymap(func) #將函數應用在DataFrame各個元素上
- map(func) #將函數應用在Series各個元素上

舉例:spa

df = pd.DataFrame({'one':[1,2,3],'two':[4,5,6],'three':[7,8,9]} ,index=['a','b','c'] )
print(df.mean()) # 按列求平均值
# one      2.0
# two      5.0
# three    8.0
print(df.mean(axis=1)) # 按行求平均值
# a    4.0
# b    5.0
# c    6.0

print(df.sum()) # 求和
# one       6
# two      15
# three    24
print(df.sort_values(by='two')) # 值排序
print(df.sort_values(by='two',ascending=False)) # 值排序(倒序)
print(df.sort_values(by='a',ascending=False,axis=1))  # 按行值排序(倒序)

print(df.sort_index()) # 索引值排序
print(df.sort_index(ascending=False)) # 索引值排序(倒序)
print(df.sort_index(ascending=False,axis=1))  # 按行索引值排序(倒序)

 

 

 

 

 

 時間對象處理

Python標準庫:datetime
    datetime.datetime.timedelta  # 表示 時間間隔
    dt.strftime() #f:format吧時間對象格式化成字符串
    strptime()  #把字符串解析成時間對象p:parse
    靈活處理時間對象:dateutil包
        dateutil.parser.parse('2019/1/29') 
    處理時間對象:pandas
        pd.to_datetime(['2011-01-01', '2012-02-02'])

產生時間對象數組:date_range start 開始時間 end 結束時間 periods 時間長度 freq 時間頻率,默認爲
'D',可選H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),… 1、時間序列就是以時間對象爲索引的Series或DataFrame。 2、datetime對象做爲索引時是存儲在DatetimeIndex對象中的。 3、時間序列特殊功能: 傳入「年」或「年月」做爲切片方式 傳入日期範圍做爲切片方式 豐富的函數支持:resample(), strftime(), …… 批量轉換爲datetime對象:to_pydatetime()

舉例3d

# 轉換時間對象
print(pd.to_datetime(['2001-01-01','2001-Feb-21']))
# 生成時間序列
print(pd.date_range('2010-01-01','2011-01-01'))
print(pd.date_range('2010-01-01',periods=10))
print(pd.date_range('2010-01-01',periods=10,freq='H'))  # 按小時
print(pd.date_range('2010-01-01',periods=10,freq='W')) # 按周
print(pd.date_range('2010-01-01',periods=10,freq='W-MON')) # 按週一
print(pd.date_range('2019-09-01',periods=30,freq='B')) # 按工做日

sr = pd.Series(np.arange(100),index=pd.date_range('2018-01-01',periods=100))
print(sr.index)
print(sr['2018-04'])
print(sr['2018-03-01':'2018-03-15'])
print(sr.resample('M').sum())

 

 

 

 

讀取文件

read_csv  讀取csv文件

read_excel 讀取excel文件

讀取文件函數主要參數:

  • sep 指定分隔符,可用正則表達式如'\s+'
  • header=None 指定文件無列名
  • name 指定列名
  • index_col 指定某列做爲索引
  • skip_row 指定跳過某些行
  • na_values 指定某些字符串表示缺失值
  • parse_dates 指定某些列是否被解析爲日期,布爾值或列表
print(pd.read_csv('600519.csv',index_col=0)) # 用第1列作索引

print(pd.read_csv('600519.csv',index_col='date'))  # 用date列作索引

pd_csv = pd.read_csv('600519.csv',index_col='date',parse_dates=['date'])  # 用date列作索引, 並轉化爲datetime類型
print(pd_csv.index)
df.rename(column={0:'a',1:"b"})  #修改列名
print(pd.read_csv('600519.csv',header=None, names=list('abcdefgh')))  # 指定列名

pd.read_csv('600519.csv',header=None, na_values=['None'])  # 指定字符串None爲Nan

 

寫入文件

一、寫入到文件:

  • to_csv

二、寫入文件函數的主要參數:

  • sep
  • na_rep 指定缺失值轉換的字符串,默認爲空字符串
  • header=False 不輸出列名一行
  • index=False 不輸出行索引一列
  • cols 指定輸出的列,傳入列表

三、其餘文件類型:json, XML, HTML, 數據庫

相關文章
相關標籤/搜索