python3 科学计算之pandas入门(一)

我的未来我决定 提交于 2019-12-06 10:30:08

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 pdobj=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]} #从字典创建DataFramedata2=[['a',1],['b',2],['c',3]]  #从列表创建DataFramedata3 = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),      'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} #从系列的字典来创建DataFramedd = 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 npimport pandas as pdimport matplotlib.pyplot as pltdata=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() #拷贝一个df2df2[df2<0]=np.nan #小于0的全部设为NANprint(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设置降序排列
#批量迭代读取csvdata2=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)

 

一.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 pdobj=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]} #从字典创建DataFramedata2=[['a',1],['b',2],['c',3]]  #从列表创建DataFramedata3 = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),      'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])} #从系列的字典来创建DataFramedd = 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 npimport pandas as pdimport matplotlib.pyplot as pltdata=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() #拷贝一个df2df2[df2<0]=np.nan #小于0的全部设为NANprint(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设置降序排列
#批量迭代读取csvdata2=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)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!