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)
12-20 00:08
查看更多