<dl id="opymh"></dl>

<div id="opymh"></div>
      <div id="opymh"><tr id="opymh"></tr></div>

        <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

        <em id="opymh"></em>

        <em id="opymh"><ol id="opymh"></ol></em>

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

              python数据分析之pandas实例解析

              #coding: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
              '''
              基本功能 函数应用和映射
               numpy的ufuncs£¨元素级数组方法£©
               DataFrame的apply方法
               对象的applymap方法£¨因为Series有一个应用于元素级的map方法£©
              '''
              
              '''
              #函数
              df=DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utah', 'Ohio', 'Texas', 'Oregon'])
              print(df)
              print(np.abs(df))#求绝对值
              
              #lambda¡¾匿名函数¡¿以及应用
              f=lambda x:x.max()-x.min()
              # def f(x):
              #  return Series([x.min(),x.max()],index=['min','max'])
              print(df.apply(f))#执行函数f[列(axis=0) 最大值£­最小值]
              print(df.apply(f,axis=1))#按照轴1执行
              
              #applymap 和 map
              _format=lambda x:'%.2f'%x
              print(df.applymap(_format))#格式化每一个元素
              print(df.e.map(_format))#格式化指定索引或列£¨相当于Series£©中的元素
              
              #排序和排位
              
              #根据索引排序£¬对于DataFrame可以指定轴
              obj=Series(range(4),index=['d', 'a', 'b', 'c'])
              print(obj.sort_index())
              
              df1=DataFrame(np.arange(8).reshape(2,4),index=['three','one'],columns=list('dabc'))
              print(df1.sort_index())
              print(df1.sort_index(axis=1,ascending=False))#按列降序
              
              #根据值排序
              obj1=Series([4,7,-3,2])
              print(obj.sort_values())
              #DataFrame指定?#20449;?#24207;
              df2= DataFrame({'b':[4, 7, -3, 2], 'a':[0, 1, 0, 1]})
              print(df2)
              print(df2.sort_values(by='b'))
              print(df2.sort_values(by=['a','b']))
              
              
              #rank£¬求排名的平均位置(从1开始)
              obj2 = Series([7, -5, 7, 4, 2, 0, 4])
              print(obj2.rank(method='first'))#去第一次出现£¬不求平均值¡£
              print(obj2.rank())#默认method='average'
              print(obj2.rank(ascending=False,method='max'))#逆序£¬并取最大值¡£所以-5的rank是7
              df3=DataFrame({'b':[4.3, 7, -3, 2],
              'a':[0, 1, 0, 1],
              'c':[-2, 5, 8, -2.5]})
              print(df3.rank(axis=1))#按?#20449;?#20301;
              
              '''
              
              #基本功能 重复索引
               #对于重复索引£¬返回Series,对应单个值的索引则返回标量
              '''
              obj = Series(range(5), index = ['a', 'a', 'b', 'b', 'c'])
              print (obj.index.is_unique) # 判断是非有重复索引
              print ( obj.a[:1])#若有重复索引则通过将?#30431;?#24341;切片取值
              df = DataFrame(np.random.randn(4, 3), index = ['a', 'a', 'b', 'b'])
              print (df)
              # # print (df.ix['b'].ix[0])
              print (df.ix['b'].ix[0])
              print (df.ix['b'].ix[1])
              '''
              #汇总和计算描述统计
               # 常用方法选项
              '''
              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选项
               
               
              '''
              
              
              #DataFrame 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()
              # all_data={}
              # #DataReader(name,data_source,start,end)
              # # for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']:
              # all_data['AAPL'] = web.DataReader('AAPL','iex',start,end)
              # pdata=Panel(all_data)
              # print(pdata)
              # price = DataFrame({tic: data['close'] for tic, data in all_data.items()})#将从all_data中将股票名为tic 的data['close']按日期索引取出并转化成DataFrame结构
              # volume = DataFrame({tic: data['volume'] for tic, data in all_data.items()})#******************
              #  # print('**********************')
              #  # print(price)
              # price.to_csv('close.csv')
              # returns = price.pct_change()
              # print(returns.tail())
              # print(returns.MSFT.corr(returns.IBM))
              # print(returns.corr())
              # print(returns.cov())
              # print(returns.corrwith(returns.IBM))
              # print(returns.corrwith(returns.volume))
              # appl=web.DataReader('AAPL','iex',start,end)
              # print(appl)
              #
              # data=all_data['AAPL']
              
              # df=DataFrame({'open':data.open,'high':data.high,'low':data.low,'close':data.close,
              #'volume':data.volume})
              # print(df.index)
              # print(df)
              # df.to_csv('apple.csv')
              name=['date','open','high','low','close','volume']
              raw=pd.read_csv('apple.csv')
              
              df2=raw.set_index(raw.date)
              df3=df2.reindex(['open','high','low','close','volume'],axis=1,)
              print(df3)
              
              # print(raw.open-raw.close)
              # print(raw)
              
              # new_index=raw.ix['date',:]
              # raw.set_axis(new_index,axis=1,inplace=True)
              
              # print(s1-s2)
              
              
              
              # print(df.index)
              
              
              '''
              如果报以下错误£º
              #from pandas.core.common import is_list_like
              # ImportError: cannot import name 'is_list_like'
              修改£¨点击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='yahoo' 会ImmediateDeprecationError£¬
              data_source='google' 因谷歌在中国不可用?#19981;?#25253;错
              具体可看.../set_packages/pandas_datareader/data.py中的相关描述
              '''
              
              '''
              #唯一值以及成员资格
              #is_in计算一个表示“Series各值是否包含于传入的值序列中”的?#32423;?#22411;数组
              # unique 计算Series中的唯一值数组£¬按发现的顺序返回
              #value_counts 返回一个Serie£¬其索引为唯一值£¬其值为频率£¬按计数值降序排列
              #去重
              obj = Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
              print (obj.unique())
              print (obj.value_counts())
              
              
              #判断元素存在
              mask = obj.isin(['b', 'c'])
              print (mask)
              print (obj[mask]) #只打印元素b和c
              data = DataFrame({'Qu1':[1, 3, 4, 3, 4],
              'Qu2':[2, 3, 1, 2, 3],
              'Qu3':[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))
              '''
              
              '''
              处理缺失数据
               NA处理方法
                dropna 根据各标签的值中是否存在缺少数据对轴
                fillba 样本值的标准差
                isnull 样本值的偏度£¨三阶矩£©
                notnull
               NaN£¨Not a Number£©表示浮点数和非浮点数组中的缺失数据
               None也被当作NA处理
               
              '''
              
              '''
              string_data = Series(['aardvark', 'artichoke', np.nan, 'avocado'])
              print(string_data.isnull())
              string_data[0]=None
              print(string_data.isnull())
              
              print(string_data.dropna())
              
              #'DataFrame对丢弃NA的处理'
              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()) # 默?#29616;?#35201;某行有NA就全?#21487;?#38500;
              print (data.dropna(how = 'all'))  # 某行全部为NA才删除
              data[4] = NA  # 新增一列
              print (data.dropna(axis = 1, how = 'all'))#某列全部为NA才删除
              data = DataFrame(np.random.randn(7, 3))
              data.ix[:4, 1] = NA#第0-4行的 1 列为NA
              data.ix[:2, 2] = NA
              print (data)
              print (data.dropna(thresh = 2)) # 行大于等于2个非NA元素会被删除
              #how参数控制行为£¬axis参数选择轴£¬thresh参数控制留下的数量
              
              #填充缺失数据
              # fillna
              # inplace参数控制返回新对象还是就地更改
              df = DataFrame(np.random.randn(7, 3))
              df.ix[:4, 1] = NA
              df.ix[:2, 2] = NA
              # print (df.fillna(0))
              # df.fillna(0, inplace = True)
              #'不同行列填充不同的值'
              print(df.fillna({1:0.5,3:-1}))#指定某列填充某值£¬列不存在则该列不填充
              
              #指定不同的填充方式method参数£¬limit参数
              # 还可用统计数据填充
              '''
              
              '''
              层次化索引
               使你能在一个轴上拥有多个£¨两个以上£©索引级别¡£抽象地说£¬它使你能以低纬度形式处理高维度数据
               通过stack与unstack变换DataFrame
              '''
              
              '''
              #Series 的层次索引
              data = Series(np.random.randn(10),
                index = [['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
              print(data)
              print(data.index)
              print(data.b)
              print(data['b':'c'])
              print(data.unstack())#转化成DataFrame结构
              print(data.unstack().stack())#转化成Series结构,将变成多级索引
              
              #DataFrame的层次索引
              df = DataFrame(np.arange(12).reshape((4, 3)),
              index = [['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
              columns = [['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']])
              
              print(df)
              df.index.names=['key1','key2']
              df.columns.names=['states','color']
              print(df)
              print(df.ix['a',1])#取索引a对应第一行
              print(df.ix['a','Ohio'])#取索引a对应Ohio列
              print(df.ix['a',2]['Colorado'])#取索引a对应第二行Colorado列的元素
              print(df.ix['a',2]['Ohio']['Red'])#取索引a对应第二行Ohio列索引对应Red列的元素
              
              #直接用MultiIndex创建层次索引结构
              print (MultiIndex.from_arrays([['Ohio', 'Ohio', 'Colorado'], ['Gree', 'Red', 'Green']],
                names = ['state', 'color']))
              
              #重新分级顺序
              frame = DataFrame(np.arange(12).reshape((4, 3)),
              index = [['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
              columns = [['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']])
              frame.index.names = ['key1', 'key2']
              frame_swapped = frame.swaplevel('key1', 'key2')
              print (frame_swapped)
              print (frame_swapped.swaplevel(0, 1))#层级转换此代码意为将一级索引转换为二级索引
              
              
              #'根据索引排序'
              print (frame.sort_index(level='key2'))
              print (frame.swaplevel(0, 1).sort_index(level=0))
              
              #根据级别汇总统计
              print(frame.sum(level='key2'))
              
              #使用列生成层次索引
              df6=DataFrame({'a':range(7),
              'b':range(7,0,-1),
              'c':['one','one','one','two','two','two','two'],
              'd':[0,1,2,0,1,2,3],
              })
              print(df6)
              print(df6.set_index(['c','d']))#将c£¬d作为行索引£¨二级索引£©
              print(df6.set_index(['c','d'],drop=False))#列依然保留
              df7=df6.set_index(['c','d'])
              print(df7.reset_index())#索引重置
              
              #避免索引产生歧义使用整数索引£¨按序£©.iloc[row,col]
              
              '''
              
              '''
              #面板£¨Pannel£©数据
               通过三维ndarray创建pannel对象
               通过ix[]选取需要的数据
               访问顺序£ºitem->major->minor
               通过stack展?#32622;?#26495;数据
               
                
              '''

               

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

              关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报?#34892;?/a>

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

              ¼«ËÙ·ÉͧºÃ¼Ù
              <dl id="opymh"></dl>

              <div id="opymh"></div>
                  <div id="opymh"><tr id="opymh"></tr></div>

                    <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                    <em id="opymh"></em>

                    <em id="opymh"><ol id="opymh"></ol></em>

                          <dl id="opymh"></dl>

                          <div id="opymh"></div>
                              <div id="opymh"><tr id="opymh"></tr></div>

                                <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                                <em id="opymh"></em>

                                <em id="opymh"><ol id="opymh"></ol></em>