一、pandas是一個強大的Python數據分析的工具包。
二、pandas是基於NumPy構建的。正則表達式
三、pandas的主要功能數據庫
四、安裝方法:pip install pandas
五、引用方法:import pandas as pdjson
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))
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
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)) # 填充空值
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處理缺失數據的相關方法:工具
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)) # 刪除爲空值的列
- 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文件
讀取文件函數主要參數:
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
一、寫入到文件:
二、寫入文件函數的主要參數:
三、其餘文件類型:json, XML, HTML, 數據庫