python3 科學計算之pandas入門(一)


一.Pandas簡介

Pandas(Python Data Analysis Library)基於Numpy構建,讓基於Numpy的應用更簡單,被廣泛應用於金融行業,流行的數據分析工具

二.Pandas安裝

由於Pandas是python的第三方庫,需要另外安裝

pip3 install pandas

 

三.Pandas的數據結構

Pandas主要有兩種數據結構:

  • 系列(Series)
  • 數據幀(DataFrame)

系列(Series)是能夠保存任何類型的數據(整數,字符串,浮點數,Python對象等)的一維標記數組。軸標簽統稱為索引。

數據幀(DataFrame)是二維數據結構,即數據以行和列的表格方式排列。

數據幀(DataFrame)的功能特點:

  • 潛在的列是不同的類型
  • 大小可變
  • 標記軸(行和列)
  • 可以對行和列執行算術運算

 

四.各個數據結構示例

1.Series

  1)創建Series

 
         
import pandas as pd
obj=pd.Series([1,3,24,23,8])
print(obj)
print(obj.values)
print(obj.index)
print(obj[3])


2)自定義index

obj=pd.Series([1,3,8,24,23],index=['a','b','c','d','e'])
print(obj)
print(obj.index)
print(obj['d'])

也可以重新索引,如果某個索引值當前不存在,就引入缺失值,

   In [10]: obj2=obj.reindex(['b','c','d','f','g'])

 
         

   In [11]: obj2
   Out[11]:
   b 3.0
   c 8.0
   d 24.0
   f NaN
  g NaN
 dtype: float64

對於缺失值,可以填充其他值

In [12]: obj2=obj.reindex(['b','c','d','f','g'],fill_value=0)

 
         

In [13]: obj2
Out[13]:
b 3
c 8
d 24
f 0
g 0
dtype: int64

 

3)使用字典創建Series

dic={'calvin':7,'kobe':24,'mj':23,'kd':35}
print(pd.Series(dic))
 
2.DataFrame
 
         
data={'name':['calvin','kobe','michale','durant','james'],'age':[29,40,56,30,34],'height':[1.70,1.98,1.98,2.06,2.03]} #從字典創建DataFrame
data2=[['a',1],['b',2],['c',3]] #從列表創建DataFrame
data3 = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} #從系列的字典來創建DataFrame
dd = pd.DataFrame(data3)
df=pd.DataFrame(data2,columns=['name','age']) #加入列標簽
dd['three']=pd.Series([10,20,30],index=['a','b','c']) #增加列
del dd['one'] #刪除列
print(pd.DataFrame(data))
print(df)
print (dd)
print(dd['one']) #列選擇
print(dd.loc['b']) #行選擇(標簽選擇)
print(dd.iloc[1]) #行選擇(按整數位置選擇)
print(dd[0:2]) #行切片
下表列出了DataFrame構造函數所能接受的各種數據:

類型 說明
二維ndarray 數據矩陣,還可以傳入行標和列標
由數組、列表或元組組成的字典 每個序列會變成DataFrame的一列。所有序列的長度必須相同
Numpy的結構化/記錄數組 類似於“由數組組成的字典”
由Series組成的字典 每個Series會成為一列。如果沒有顯示指定索引,則各Series的索引會被合並成結果的行索引
由字典組成的字典 各內層字典會成為一列。鍵會被合並成結果的行索引,跟“由Series組成的字典”的情況一樣
字典或Series的列表 各項將會成為DataFrame的一行。字典鍵或Series索引的並集將會成為DataFrame的列標
由列表或元組組成的列表 類似於“二維ndarray”
另一個DataFrame 該DataFrame的索引將會被沿用,除非顯式指定了其他索引
Numpy的MaskedArray 類似於“二維ndarray”的情況,只是掩碼值在結果DataFrame會變成NA/缺失值

五.讀取Excel文件&CSV文件

新建一個測試用的Excel,命名為

google.xlsx

並加入一些數據,放入到pycharm工程目錄下,數據如下圖:

 

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_excel("google.xlsx")
print(data.head(3)) #讀取前三行數據
print(data.tail(3)) #讀取后三行數據
print(data.describe()) #數據概要統計

#使用日期做索引
dates=pd.to_datetime(data['Date'])
df=data.set_index(dates)
df.drop('Date',1,inplace=True)
df['Close'].plot()
plt.show() #顯示圖片

loc——通過行標簽索引行數據 
iloc——通過行號索引行數據 
#訪問某列
print(df['Close'])
#切片,獲取指定的行
print(df['2018-08-08':'2018-08-18'])
#索引切片
print(df.loc['2018-08-09',['Open','Close']]) #兩個維度切片
print(df.loc['2018-08-09','Open']) #查看2018-08-09這個日期的Open值
print(df.loc['2018-08-02':'2018-08-06','Close']) #查看2018-08-02到2018-08-06之間的Close值
print(df.loc['2018-08-04':'2018-08-08',['Open','Close']]) #查看2018-08-02到2018-08-06之間的Open值和Close值
#位置切片
print(df.iloc[0,:]) #查看第一條數據
print(df.iloc[-5:,:])#獲取倒數五條數據
print(df.iloc[-20:-10:4]) #步長為4,獲取倒數20行到倒數10行的數據
print(df.iloc[0,0]) #獲取第一條的第一個數據
print(df.at[dates[0],'Close']) #獲取第一個日期的Close值
print(df[df['Open']>60]) #篩選數據,獲取Open值大於60的數據
df['Fake']=pd.Series(np.random.randn(len(df)),index=dates) #增加一列數據
print(df)
df2=df.copy() #拷貝一個df2
df2[df2<0]=np.nan #小於0的全部設為NAN
print(df2)
print(df.mean()) #每一列的平均值
print(df.mean(1)) #每一行的平均值
print(df.groupby(by=df.index.year).mean()) #以年分組,求各年份的平均值
print(df.sort_values(by='Open',ascending=False)) #默認升序排序,ascending=False設置降序排列

#批量迭代讀取csv

data2=pd.read_csv('test.csv',iterator=True,chunksize=10000,usecols=['date'])
print(data2.get_chunk(4)) #獲取前四行的數據
print(data2) #顯示一串字符串 <pandas.io.parsers.TextFileReader object at 0x004CC490>
for i in data2: #迭代讀取csv的數據
print(i)


 


免責聲明!

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



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