pandas使用


pandas簡介

1、pandas是一個強大的Python數據分析的工具包。
2、pandas是基於NumPy構建的。

3、pandas的主要功能

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

4、安裝方法:pip install pandas
5、引用方法:import pandas as pd

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組成的字典,並且共用一個索引

 

 

 

創建方式及常用屬性

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各個元素上

舉例:

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()

舉例

# 轉換時間對象
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

 

寫入文件

1、寫入到文件:

  • to_csv

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

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

3、其他文件類型:json, XML, HTML, 數據庫


免責聲明!

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



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