程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python基礎之pandas

編輯:Python

pandas創建時間

import pandas as pd
import numpy as np
dates=pd.date_range('20130101',periods=6)//代表從20130101開始 往後六天的時間都存在dates裡
//DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
注意:是按照天數疊加的
對dates的進一步處理
df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])

 

以時期為索引處理後的結果如圖所示。

接下來就是對處理完對象的訪問操作。
print(df['A'])Or print(df.A) 都是按列提取,這裡提取的是A列
2013-01-01 0
2013-01-02 4
2013-01-03 8
2013-01-04 12
2013-01-05 16
2013-01-06 20
Freq: D, Name: A, dtype: int32
print(df[0:3]) or print(df[20100101:20100106]) 這種切片操作是對索引進行操作,就是提取第幾行到第幾行
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
更高端的索引:loc
print(df.loc['20130102'])
A 4
B 5
C 6
D 7
Name: 2013-01-02 00:00:00, dtype: int32
pfint(df.loc[:,['A']]) 所有的行,A列
A
2013-01-01 0
2013-01-02 4
2013-01-03 8
2013-01-04 12
2013-01-05 16
2013-01-06 20
pfint(df.loc['20130102':,['A']]) 20130102到結尾的,A列
A
2013-01-02 4
2013-01-03 8
2013-01-04 12
2013-01-05 16
2013-01-06 20
更高端的索引:iloc (index local 的縮寫)
print(df.iloc[3,1]) //第三行第一列的那個數
print(df.iloc[3:5,1:3]) //配合切片操作
print(df.iloc[[1,3,5],1:3]) //第1,3,5行的第1-3列
更高端的索引 可以將loc和iloc混合使用的 ix
print(df.ix[:3,['A','B']]) //0-3行(iloc)的A,B列(loc)
更高端的索引:Boolean
print(df[df.A>8])//篩選出df中第A列中比8大的數據

修改數值

數據准備階段:
dates=pd.date_range('20130101',periods=6)
df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
用iloc訪問並且修改:
df.iloc[2,2]=1111 //注意第三行第三列
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 1111 11
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
df.loc['20130101','A']=2222
A B C D
2013-01-01 2222 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 1111 11
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
​
df[df.A>8]=0 //A列中大於8的那一行所有數字設置為零
A B C D
2013-01-01 0 0 0 0
2013-01-02 4 5 6 7
2013-01-03 8 9 1111 11
2013-01-04 0 0 0 0
2013-01-05 0 0 0 0
2013-01-06 0 0 0 0
df.B[df.A>8]// A列中大於8的哪一行的B列中的數字設置為0

 添加新序列


數據准備階段:
import pandas as pd
import numpy as np
dates=pd.date_range('20130101',periods=6)//代表從20130101開始 往後六天的時間都存在dates裡
//DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
注意:是按照天數疊加的
對dates的進一步處理
df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
添加空列
df['E']=np.nan
添加有初始值的列
df['F']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130101',periods=6))

 處理丟失數據

 


數據准備階段:
import pandas as pd
import numpy as np
dates=pd.date_range('20130101',periods=6)//代表從20130101開始 往後六天的時間都存在dates裡
//DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
注意:是按照天數疊加的
對dates的進一步處理
df=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
模擬出現丟失數據
df.iloc[0,1]=np.nan
df.iloc[1,2]=np.nan
方案1:丟棄數據
pfint(df.dropna(axis=0 or 1,how='any' or 'all')) axis等於0的時候 從上往下進行檢索,how等於any代表檢索到有nan的行就立馬刪除,all代表只有這一行全是nan的時候我才刪除這一行
方案2:填充數據
print(df.fillna(value=0))
方案3:檢查是否為空
print(df.isnull())
或者說我想知道我這一堆數據裡有沒有空的
print(np.any(df.isnull()==True)

重頭戲:導入到出數據

import pandas as pd
import numpy as np
讀入數據(最好是csv格式)
data=pd.read_csv('文件路徑')
保存數據
data.to_文件格式('文件路徑')

 


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved