频道栏目
首页 > 程序开发 > Web开发 > Python > 正文
python数据分析之pandas实例解析
2018-07-27 14:40:33         来源:SunChao3555的博客  
收藏   我要投稿

python数据分析之pandas实例解析

注册送白菜38coding:utf-8
import scrapy
import xlwt, lxml
import re, json
import matplotlib.pyplot as plt
import numpy as np
import pylab
from scipy import linalg
from pandas import DataFrame,Series,MultiIndex
import pandas as pd
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
基本功能 函数应用和映射
 numpy的ufuncs(元素级数组方法)
 DataFrame的apply方法
 对象的applymap方法(因为Series有一个应用于元素级的map方法)
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
注册送白菜38函数
df=DataFrame(np.random.randn(4,3),columns=list(&注册送白菜3839;bde&注册送白菜3839;),index=[&注册送白菜3839;Utah&注册送白菜3839;, &注册送白菜3839;Ohio&注册送白菜3839;, &注册送白菜3839;Texas&注册送白菜3839;, &注册送白菜3839;Oregon&注册送白菜3839;])
print(df)
print(np.abs(df))注册送白菜38求绝对值
注册送白菜38lambda【匿名函数】以及应用
f=lambda x:x.max()-x.min()
注册送白菜38 def f(x):
注册送白菜38  return Series([x.min(),x.max()],index=[&注册送白菜3839;min&注册送白菜3839;,&注册送白菜3839;max&注册送白菜3839;])
print(df.apply(f))注册送白菜38执行函数f[列(axis=0) 最大值-最小值]
print(df.apply(f,axis=1))注册送白菜38按照轴1执行
注册送白菜38applymap 和 map
_format=lambda x:&注册送白菜3839;%.2f&注册送白菜3839;%x
print(df.applymap(_format))注册送白菜38格式化每一个元素
print(df.e.map(_format))注册送白菜38格式化指定索引或列(相当于Series)中的元素
注册送白菜38排序和排位
注册送白菜38根据索引排序,对于DataFrame可以指定轴
obj=Series(range(4),index=[&注册送白菜3839;d&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;c&注册送白菜3839;])
print(obj.sort_index())
df1=DataFrame(np.arange(8).reshape(2,4),index=[&注册送白菜3839;three&注册送白菜3839;,&注册送白菜3839;one&注册送白菜3839;],columns=list(&注册送白菜3839;dabc&注册送白菜3839;))
print(df1.sort_index())
print(df1.sort_index(axis=1,ascending=False))注册送白菜38按列降序
注册送白菜38根据值排序
obj1=Series([4,7,-3,2])
print(obj.sort_values())
注册送白菜38DataFrame指定列排序
df2= DataFrame({&注册送白菜3839;b&注册送白菜3839;:[4, 7, -3, 2], &注册送白菜3839;a&注册送白菜3839;:[0, 1, 0, 1]})
print(df2)
print(df2.sort_values(by=&注册送白菜3839;b&注册送白菜3839;))
print(df2.sort_values(by=[&注册送白菜3839;a&注册送白菜3839;,&注册送白菜3839;b&注册送白菜3839;]))

注册送白菜38rank,求排名的平均位置(从1开始)
obj2 = Series([7, -5, 7, 4, 2, 0, 4])
print(obj2.rank(method=&注册送白菜3839;first&注册送白菜3839;))注册送白菜38去第一次出现,不求平均值。
print(obj2.rank())注册送白菜38默认method=&注册送白菜3839;average&注册送白菜3839;
print(obj2.rank(ascending=False,method=&注册送白菜3839;max&注册送白菜3839;))注册送白菜38逆序,并取最大值。所以-5的rank是7
df3=DataFrame({&注册送白菜3839;b&注册送白菜3839;:[4.3, 7, -3, 2],
&注册送白菜3839;a&注册送白菜3839;:[0, 1, 0, 1],
&注册送白菜3839;c&注册送白菜3839;:[-2, 5, 8, -2.5]})
print(df3.rank(axis=1))注册送白菜38按列排位
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
注册送白菜38基本功能 重复索引
 注册送白菜38对于重复索引,返回Series,对应单个值的索引则返回标量
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
obj = Series(range(5), index = [&注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;c&注册送白菜3839;])
print (obj.index.is_unique) 注册送白菜38 判断是非有重复索引
print ( obj.a[:1])注册送白菜38若有重复索引则通过将该索引切片取值
df = DataFrame(np.random.randn(4, 3), index = [&注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;])
print (df)
注册送白菜38 注册送白菜38 print (df.ix[&注册送白菜3839;b&注册送白菜3839;].ix[0])
print (df.ix[&注册送白菜3839;b&注册送白菜3839;].ix[0])
print (df.ix[&注册送白菜3839;b&注册送白菜3839;].ix[1])
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
注册送白菜38汇总和计算描述
 注册送白菜38 常用方法选项
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
axis 指定轴,DataFrame行用0,列用1
 skipna 排除缺失值,默认值为True
 level 如果轴是层次化索引(即MultiIndex),则根据level选取分组
 count 非NA值的数量
 describe 汇总
 min,max
 argmin,argmax 计算能够获取到最小值和最大值的索引位置(整数)
 idxmin,idxmax 计算能够获取到最小值和最大值的索引值
 sum,mean,median,mad 总和,均值,中位数,平均绝对离差
 var,std,skew,kurt,cumsum,cummin,cummax,cumprod 样本值的方差、标准差、偏度(三阶矩)、偏度(四阶矩)、累计和、累计最大值、累计最小值、累计积
 diff 计算一阶差分
 pct_change 计算百分数变化
 NA值被自动排查,除非通过skipna选项
 
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;

注册送白菜38DataFrame csv文件读写以及pandas_datareader 的使用
import pandas_datareader.data as web
from pandas import Panel
import datetime
start=datetime.datetime(2017,7,25)
end=datetime.date.today()
注册送白菜38 all_data={}
注册送白菜38 注册送白菜38DataReader(name,data_source,start,end)
注册送白菜38 注册送白菜38 for ticker in [&注册送白菜3839;AAPL&注册送白菜3839;, &注册送白菜3839;IBM&注册送白菜3839;, &注册送白菜3839;MSFT&注册送白菜3839;, &注册送白菜3839;GOOG&注册送白菜3839;]:
注册送白菜38 all_data[&注册送白菜3839;AAPL&注册送白菜3839;] = web.DataReader(&注册送白菜3839;AAPL&注册送白菜3839;,&注册送白菜3839;iex&注册送白菜3839;,start,end)
注册送白菜38 pdata=Panel(all_data)
注册送白菜38 print(pdata)
注册送白菜38 price = DataFrame({tic: data[&注册送白菜3839;close&注册送白菜3839;] for tic, data in all_data.items()})注册送白菜38将从all_data中将股票名为tic 的data[&注册送白菜3839;close&注册送白菜3839;]按日期索引取出并转化成DataFrame结构
注册送白菜38 volume = DataFrame({tic: data[&注册送白菜3839;volume&注册送白菜3839;] for tic, data in all_data.items()})注册送白菜38******************
注册送白菜38  注册送白菜38 print(&注册送白菜3839;**********************&注册送白菜3839;)
注册送白菜38  注册送白菜38 print(price)
注册送白菜38 price.to_csv(&注册送白菜3839;close.csv&注册送白菜3839;)
注册送白菜38 returns = price.pct_change()
注册送白菜38 print(returns.tail())
注册送白菜38 print(returns.MSFT.corr(returns.IBM))
注册送白菜38 print(returns.corr())
注册送白菜38 print(returns.cov())
注册送白菜38 print(returns.corrwith(returns.IBM))
注册送白菜38 print(returns.corrwith(returns.volume))
注册送白菜38 appl=web.DataReader(&注册送白菜3839;AAPL&注册送白菜3839;,&注册送白菜3839;iex&注册送白菜3839;,start,end)
注册送白菜38 print(appl)
注册送白菜38
注册送白菜38 data=all_data[&注册送白菜3839;AAPL&注册送白菜3839;]
注册送白菜38 df=DataFrame({&注册送白菜3839;open&注册送白菜3839;:data.open,&注册送白菜3839;high&注册送白菜3839;:data.high,&注册送白菜3839;low&注册送白菜3839;:data.low,&注册送白菜3839;close&注册送白菜3839;:data.close,
注册送白菜38&注册送白菜3839;volume&注册送白菜3839;:data.volume})
注册送白菜38 print(df.index)
注册送白菜38 print(df)
注册送白菜38 df.to_csv(&注册送白菜3839;apple.csv&注册送白菜3839;)
name=[&注册送白菜3839;date&注册送白菜3839;,&注册送白菜3839;open&注册送白菜3839;,&注册送白菜3839;high&注册送白菜3839;,&注册送白菜3839;low&注册送白菜3839;,&注册送白菜3839;close&注册送白菜3839;,&注册送白菜3839;volume&注册送白菜3839;]
raw=pd.read_csv(&注册送白菜3839;apple.csv&注册送白菜3839;)
df2=raw.set_index(raw.date)
df3=df2.reindex([&注册送白菜3839;open&注册送白菜3839;,&注册送白菜3839;high&注册送白菜3839;,&注册送白菜3839;low&注册送白菜3839;,&注册送白菜3839;close&注册送白菜3839;,&注册送白菜3839;volume&注册送白菜3839;],axis=1,)
print(df3)
注册送白菜38 print(raw.open-raw.close)
注册送白菜38 print(raw)
注册送白菜38 new_index=raw.ix[&注册送白菜3839;date&注册送白菜3839;,:]
注册送白菜38 raw.set_axis(new_index,axis=1,inplace=True)
注册送白菜38 print(s1-s2)

注册送白菜38 print(df.index)

&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
如果报以下错误:
注册送白菜38from pandas.core.common import is_list_like
注册送白菜38 ImportError: cannot import name &注册送白菜3839;is_list_like&注册送白菜3839;
修改(点击Run信息框中的文件地址链接亦可)...set_packages/pandas_datareader/fred.py文件中的from pandas.core.common import 
is_like_list 
为from pandas.api.types import is_like_list【通常在文件第一行】
另外,data_source=&注册送白菜3839;yahoo&注册送白菜3839; 会ImmediateDeprecationError,
data_source=&注册送白菜3839;google&注册送白菜3839; 因谷歌在中国不可用也会报错
具体可看.../set_packages/pandas_datareader/data.py中的相关描述
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
注册送白菜38唯一值以及成员资格
注册送白菜38is_in计算一个表示“Series各值是否包含于传入的值序列中”的布尔型数组
注册送白菜38 unique 计算Series中的唯一值数组,按发现的顺序返回
注册送白菜38value_counts 返回一个Serie,其索引为唯一值,其值为频率,按计数值降序排列
注册送白菜38去重
obj = Series([&注册送白菜3839;c&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;d&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;c&注册送白菜3839;, &注册送白菜3839;c&注册送白菜3839;])
print (obj.unique())
print (obj.value_counts())

注册送白菜38判断元素存在
mask = obj.isin([&注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;c&注册送白菜3839;])
print (mask)
print (obj[mask]) 注册送白菜38只打印元素b和c
data = DataFrame({&注册送白菜3839;Qu1&注册送白菜3839;:[1, 3, 4, 3, 4],
&注册送白菜3839;Qu2&注册送白菜3839;:[2, 3, 1, 2, 3],
&注册送白菜3839;Qu3&注册送白菜3839;:[1, 5, 2, 4, 4]})
print (data)
print (data.apply(pd.value_counts).fillna(0))
print (data.apply(pd.value_counts, axis = 1).fillna(0))
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
处理缺失数据
 NA处理方法
  dropna 根据各标签的值中是否存在缺少数据对轴
  fillba 样本值的标准差
  isnull 样本值的偏度(三阶矩)
  notnull
 NaN(Not a Number)表示浮点数和非浮点数组中的缺失数据
 None也被当作NA处理
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
string_data = Series([&注册送白菜3839;aardvark&注册送白菜3839;, &注册送白菜3839;artichoke&注册送白菜3839;, np.nan, &注册送白菜3839;avocado&注册送白菜3839;])
print(string_data.isnull())
string_data[0]=None
print(string_data.isnull())
print(string_data.dropna())
注册送白菜38&注册送白菜3839;DataFrame对丢弃NA的处理&注册送白菜3839;
from numpy import nan as NA
data = DataFrame([[1., 6.5, 3.], [1., NA, NA],
[NA, NA, NA], [NA, 6.5, 3.]])
print (data.dropna()) 注册送白菜38 默认只要某行有NA就全部删除
print (data.dropna(how = &注册送白菜3839;all&注册送白菜3839;))  注册送白菜38 某行全部为NA才删除
data[4] = NA  注册送白菜38 新增一列
print (data.dropna(axis = 1, how = &注册送白菜3839;all&注册送白菜3839;))注册送白菜38某列全部为NA才删除
data = DataFrame(np.random.randn(7, 3))
data.ix[:4, 1] = NA注册送白菜38第0-4行的 1 列为NA
data.ix[:2, 2] = NA
print (data)
print (data.dropna(thresh = 2)) 注册送白菜38 行大于等于2个非NA元素会被删除
注册送白菜38how参数控制行为,axis参数选择轴,thresh参数控制留下的数量
注册送白菜38填充缺失数据
注册送白菜38 fillna
注册送白菜38 inplace参数控制返回新对象还是就地更改
df = DataFrame(np.random.randn(7, 3))
df.ix[:4, 1] = NA
df.ix[:2, 2] = NA
注册送白菜38 print (df.fillna(0))
注册送白菜38 df.fillna(0, inplace = True)
注册送白菜38&注册送白菜3839;不同行列填充不同的值&注册送白菜3839;
print(df.fillna({1:0.5,3:-1}))注册送白菜38指定某列填充某值,列不存在则该列不填充
注册送白菜38指定不同的填充方式method参数,limit参数
注册送白菜38 还可用数据填充
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
层次化索引
 使你能在一个轴上拥有多个(两个以上)索引级别。抽象地说,它使你能以低纬度形式处理高维度数据
 通过stack与unstack变换DataFrame
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
注册送白菜38Series 的层次索引
data = Series(np.random.randn(10),
  index = [[&注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;c&注册送白菜3839;, &注册送白菜3839;c&注册送白菜3839;, &注册送白菜3839;d&注册送白菜3839;, &注册送白菜3839;d&注册送白菜3839;],[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
print(data)
print(data.index)
print(data.b)
print(data[&注册送白菜3839;b&注册送白菜3839;:&注册送白菜3839;c&注册送白菜3839;])
print(data.unstack())注册送白菜38转化成DataFrame结构
print(data.unstack().stack())注册送白菜38转化成Series结构,将变成多级索引
注册送白菜38DataFrame的层次索引
df = DataFrame(np.arange(12).reshape((4, 3)),
index = [[&注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;], [1, 2, 1, 2]],
columns = [[&注册送白菜3839;Ohio&注册送白菜3839;, &注册送白菜3839;Ohio&注册送白菜3839;, &注册送白菜3839;Colorado&注册送白菜3839;], [&注册送白菜3839;Green&注册送白菜3839;, &注册送白菜3839;Red&注册送白菜3839;, &注册送白菜3839;Green&注册送白菜3839;]])
print(df)
df.index.names=[&注册送白菜3839;key1&注册送白菜3839;,&注册送白菜3839;key2&注册送白菜3839;]
df.columns.names=[&注册送白菜3839;states&注册送白菜3839;,&注册送白菜3839;color&注册送白菜3839;]
print(df)
print(df.ix[&注册送白菜3839;a&注册送白菜3839;,1])注册送白菜38取索引a对应第一行
print(df.ix[&注册送白菜3839;a&注册送白菜3839;,&注册送白菜3839;Ohio&注册送白菜3839;])注册送白菜38取索引a对应Ohio列
print(df.ix[&注册送白菜3839;a&注册送白菜3839;,2][&注册送白菜3839;Colorado&注册送白菜3839;])注册送白菜38取索引a对应第二行Colorado列的元素
print(df.ix[&注册送白菜3839;a&注册送白菜3839;,2][&注册送白菜3839;Ohio&注册送白菜3839;][&注册送白菜3839;Red&注册送白菜3839;])注册送白菜38取索引a对应第二行Ohio列索引对应Red列的元素
注册送白菜38直接用MultiIndex创建层次索引结构
print (MultiIndex.from_arrays([[&注册送白菜3839;Ohio&注册送白菜3839;, &注册送白菜3839;Ohio&注册送白菜3839;, &注册送白菜3839;Colorado&注册送白菜3839;], [&注册送白菜3839;Gree&注册送白菜3839;, &注册送白菜3839;Red&注册送白菜3839;, &注册送白菜3839;Green&注册送白菜3839;]],
  names = [&注册送白菜3839;state&注册送白菜3839;, &注册送白菜3839;color&注册送白菜3839;]))
注册送白菜38重新分级顺序
frame = DataFrame(np.arange(12).reshape((4, 3)),
index = [[&注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;a&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;, &注册送白菜3839;b&注册送白菜3839;], [1, 2, 1, 2]],
columns = [[&注册送白菜3839;Ohio&注册送白菜3839;, &注册送白菜3839;Ohio&注册送白菜3839;, &注册送白菜3839;Colorado&注册送白菜3839;], [&注册送白菜3839;Green&注册送白菜3839;, &注册送白菜3839;Red&注册送白菜3839;, &注册送白菜3839;Green&注册送白菜3839;]])
frame.index.names = [&注册送白菜3839;key1&注册送白菜3839;, &注册送白菜3839;key2&注册送白菜3839;]
frame_swapped = frame.swaplevel(&注册送白菜3839;key1&注册送白菜3839;, &注册送白菜3839;key2&注册送白菜3839;)
print (frame_swapped)
print (frame_swapped.swaplevel(0, 1))注册送白菜38层级转换此注册送白菜网意为将一级索引转换为二级索引

注册送白菜38&注册送白菜3839;根据索引排序&注册送白菜3839;
print (frame.sort_index(level=&注册送白菜3839;key2&注册送白菜3839;))
print (frame.swaplevel(0, 1).sort_index(level=0))
注册送白菜38根据级别汇总
print(frame.sum(level=&注册送白菜3839;key2&注册送白菜3839;))
注册送白菜38使用列生成层次索引
df6=DataFrame({&注册送白菜3839;a&注册送白菜3839;:range(7),
&注册送白菜3839;b&注册送白菜3839;:range(7,0,-1),
&注册送白菜3839;c&注册送白菜3839;:[&注册送白菜3839;one&注册送白菜3839;,&注册送白菜3839;one&注册送白菜3839;,&注册送白菜3839;one&注册送白菜3839;,&注册送白菜3839;two&注册送白菜3839;,&注册送白菜3839;two&注册送白菜3839;,&注册送白菜3839;two&注册送白菜3839;,&注册送白菜3839;two&注册送白菜3839;],
&注册送白菜3839;d&注册送白菜3839;:[0,1,2,0,1,2,3],
})
print(df6)
print(df6.set_index([&注册送白菜3839;c&注册送白菜3839;,&注册送白菜3839;d&注册送白菜3839;]))注册送白菜38将c,d作为行索引(二级索引)
print(df6.set_index([&注册送白菜3839;c&注册送白菜3839;,&注册送白菜3839;d&注册送白菜3839;],drop=False))注册送白菜38列依然保留
df7=df6.set_index([&注册送白菜3839;c&注册送白菜3839;,&注册送白菜3839;d&注册送白菜3839;])
print(df7.reset_index())注册送白菜38索引重置
注册送白菜38避免索引产生歧义使用整数索引(按序).iloc[row,col]
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;
注册送白菜38面板(Pannel)数据
 通过三维ndarray创建pannel对象
 通过ix[]选取需要的数据
 访问顺序:item->major->minor
 通过stack展现面板数据
  
&注册送白菜3839;&注册送白菜3839;&注册送白菜3839;

 

点击复制链接 与好友分享!回本站首页
上一篇:利用Python实现权限设置的详细教程
下一篇:最后一页
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑--致力于做实用的IT技术学习网站

注册送白菜38