符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
pandas官方文档:
10年积累的做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有罗湖免费网站建设让你可以放心的选择与我们合作。
对常用函数做了汇总,每个函数的参数可能不是全的,但是常用的,不常用的没总结,如有问题,请不吝赐教,谢谢!
1、创建Series
通用函数:pd.Series(values,index)
1)pd.Series([1,2,3],index=[‘a’,‘b’,‘c‘])
2)pd.Series(np.array([1,2,3]),index=[‘a’,‘b’,‘c‘])
3)pd.Series({ 'a':1, 'b':2, 'c':3})
Series转字典:Series.to_dict()
说明:Series的values参数是python中常见的一维数据类型。
2、属性
1)Series.values ---array([1,2,3])
Series的values是array类型
2)Series.index---index([‘a’,‘b’,‘c‘])
未指定index时,自动生成 0-(N-1)的整数索引,
指定 index时,使用指定索引。
3、Series的索引与切片
Series[0] / Series['a'] : Sereis可以位置索引或标签索引,也可以进行切片操作
1、创建DataFrame
1) 创建DataFrame的通用函数:
df = pd.DataFrame(values,index,columns)
pd.dataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns=['bj','sh','sz'])
pd.dataFrame(np.arange(1,10).reshape(3,3),index=['a','b','c'],columns=['bj','sh','sz'])
pd.dataFrame('bj':[1,4,7],'sh':[2,5,8],'sz':[3,6,9],index=['a','b','c'])
说明:创建方法与Sries类似,Series的values参数是python中常见的一维数据类型,DataFrame的values参数是python中常见的二维数据类型。
2) 通过网页中复制数据快捷创建
import webbrowser
link = ''
webbrowser.open(link)
打开界面进行复制,将数据复制到粘贴板中
df = pd.read_clipboard() #从粘贴板中读取数据
3)通过Series创建DataFrame
df = pd.DataFrame([s1,s2,s3],columns=['bj','sh','sz'])
注意:单独的s1,s2,s3是纵向排列的的Series,但是在DataFrame中是横向排列的。
自己总结:Series除了打印出来是Series格式外,其他时候可以直接当作list来操作。
2、属性
1)df.columns
通过columns生成新的DataFrame
df_new = pd.DataFrame(df,columns=['x1','x2'])
或者df_new = df[['x1','x2']]
2)df.shape 显示行列数
3)df.head() 默认显示前5行
4)df.tail() 默认显示后5行
3、获取DataFrame的列
1)获取DataFrame某一列
df.x1或df['x1']:返回值是Series,可以理解为一个DataFrame是由多个Series组成的。
2) 获取DataFrame某几列
df_new = df[['x1','x2','x3']]
4、为某列赋值
1) df['x1'] = range(10)
2) df['x1'] = numpy.arange(10)
3) df['x1'] = pd.Series(np.arange(10))
说明:类似于创建Series
5、为某列对应的特定行重新赋值
df['x1'] = pd.Series([2,3],index=[0,1])
将列为x1,行索引为0和1的值改为2,3
6、获取DadaFrame的行
for row in DataFrame.iterrows():
print(row[0],row[1])
#每个row是一个元祖,包含2个元素,row[0]是整型索引,row[1]是Series,所以从行的角度也可以看出,一个DataFrame是由多个Series组成的。
7、DataFrame的转置
df_new = df.T
1、粘贴板的io
df = pd.read_clipboard()
df.to_clipboard()
2、csv的io
df.to_csv('xxx.csv')
df = pd.read_csv('xxx.csv')
3、json的io
df.to_json()
pd.read_json(df.to_json())
4、excel的io
df.to_excel('xx.xlsx')
df = pd.read_excel('xx.xlsx')
5、df = pd.read_sql('')
df.to_sql('')
1、iloc
sub_df = df.iloc[10:20,:] 选取DataFrame的10-20行,所有列数据
sub_df = df.iloc[10:20,0:2]
说明:iloc函数是位置索引,与索引的名字无关。
2、loc
sub_df = df.loc[10:20,:'movie_name']
说明:loc是标签索引,10,20,'movie_name' 都是索引名字,与位置无关。
1、Series.reindex(index=['x1','x2','x3'],fill_value=10)
将df重新索引,并且将NaN空值用10进行填充
2、Series.reindex(index=range(15),method='ffill')
前项填充,后面的值用前面的值进行填充
通过reindex想到,如果想新增一个空列或者空行,可以用reindex方法,同样地,想减少某些行或者某些列,也可以用reindex方法。
继reindex之后删除行列的函数操作
Series.drop('A') #删除'A'所对应的值
DataFrame.drop(label,axis)
label可以是行名也可以是列名,label是行的话axis是0,label是列的话axis是1。
** 删除行还可以用 del df['A']
nan是numpy的一种数据类型,np.nan,float类型
任何数据与nan的运算结果都是nan
1、nan in Series
Series.isnull() --返回value为True或者False的Series
Series.notnull() --返回value为True或者False的Series
Series.dropna() --返回删除nan值后的Series
Series.fillna(method='ffill') --前项插值,按照前面的值填充后面的空值
2、nan in DataFrame
df.isnull() --返回value为True或者False的DataFrame
df.notnull() --返回value为True或者False的DataFrame
df.dropna(axis=0/1,how='any/all',thresh=None)
说明:axis表示删除行为nan或者列为nan;
any表示只要有一个为空,all表示行中的每个元素或者列中的每个元素为空;
thresh是阈值的意思,表示某行或者某列nan的个数达到阈值的个数时才删除该行或该列。
df.fillna(value=1) ---所有的空值都填充为1
df.fillna(value={0:0,1:1,2:2}) ---将0列的空值填为0,1列的空值填为1,2列的空值填为2,默认为填充列
注意:fillna和dropna的特点,生成新的DataFrame,原来的DataFrame不变。
1、多重索引介绍
Series = pd.Series(np.random.randn(6),index=[['1','1','1','2','2','2'],['a','b','c','a','b','c']])
'1','2'为一级索引,'a','b','c'为二级索引
df 可以看做是索引的'1','2'的Series
Series['1'] --Series
Series['1']['a'] --value
Series[:,'a'] --选择'1'和'2'中的'a'对应的值
2、多重索引格式转为二维DataFrame
df = Series.unstack() --转为二维DataFrame
3、多重索引在DataFrame中的操作
1、 map函数与apply函数、applymap函数的区别:
1)map函数对Series中的每个元素作用;
2)applymap函数对DataFrame中的每个元素作用;
3)apply函数对对DataFrame和Series的一列做整体运算。
2、Series.replace(to_replace=[2,3,4],values=[20,30,40]) 替换Series中多个值
Series.replace({1:10,2:20}) 将索引为1的值替换为10,将索引为2的值替换为20
df.sum() --默认按照列进行求和,nan的值被忽略
df.min() --默认按照列求最小值
df.max() --默认按照列求最大值
df.mean() --默认按照列求平均值
df.describe() --默认按照列进行描述
df.sum(axis=1) --按行求和,nan的值被忽略
#axis=0表示对横轴进行操作,但是运算中表现为纵轴操作
#axis=1表示对纵轴进行操作,但是运算中表现为横轴操作
bins = [0,59,70,80,100],bins是分割范围
score_cat = pd.cut(Series,bins) ---得到catgory类型的数据
DataFrame的分箱技术很棒啊!
pd['catgory'] = pd.cut(df['a'],bins=[0,59,70,80,100],labels=['low','ok','good','great'])
--新增一列,将a列的值按照labels进行分类标记,good!!!
#生成长度为3的随机字符串 pd.util.testing.rands(3)
1、按照一列分组
g = df.groupby('city')
g是分组类型数据,打印不出来,所以看不到,但是有属性和方法可以间接的了解
1) g.groups --得到分的几个组,和每个组包含的索引
2)g.get_group('BJ') --得到'BJ'所对应的组
3)groupby = split +apply +combine
g.mean() --求每组的平均值
g.max() --求每组的最大值
g.min() --求每组的最小值
g.count()
g.describe()
4)g是一个可迭代对象,可以用list函数将其转化为list
list(g) -- [('组名1',DataFrame1),('组名2',DataFrame2),(),()]
dict(list(g)) --将其转化为字典
同时可以通过for循环进行遍历操作:for item,desc in g:print(item,desc)
#怪不得分组后不是DataFrame,因为元组的第一个元素是'分组名'。
2、按照多列分组
g_new = df.groupby(['city','wind'])
得到生成器((('分组1','分组2'),DataFrame),(),()...)
g_new.get_group(('分组1','分组2'))
for (name_1,name_2),group in g_new:
print((name_1,name_2),group)
g.mean() --求每组的平均值
与g.agg('mean')方法一样
pd.pivot_table(df,index=['',''],aggfuc='sum',values=['',''])
index是分组的组名,values是透视表呈现结果的列,columns是values下的分解
#感觉透视表呈现的结果就是groupby+agg后的结果
#分析者需要对数据结构有一定的了解
df.sort_values(by='',ascending=True/False)[:10] df可以索引
df.value_counts() --按值计数
df.['a'] = df['b'].apply(lambda x:x0) --DataFrame中的True/False
通过g.size()可以看到被groupby之后的数据,得到的是一个Series
1、Series的排序:
1)对值进行排序
Series.sort_values() ---直接对Series的值进行排序
2)通过索引进行排序
Series.sort_index()
#默认都是升序排列
2、DataFrame的排序
df.sort_values(by='') --按照某列的顺序进行排序
df['a'].sort_values() --返回对a列数据的排序结果,只返回a列
1、df.index = Series(['a','b','c']) 直接对index赋予新值
2、df.index = df.index.map(str.upper)
map函数中只传入新的函数名即可
3、df.rename(index=str.upper,columns=str.lower)
或者传递字典,进行一一转换
pd.merge(df1,df2,on=None,how='left/right/inner/outer')
pd.merge(df1,df2) --没有on参数默认先找相同的columns,然后在columns下找相同的values
pd.merge(df1,df2,on='columns') --on参数是指按照指定列进行merge
left:表示以左边的数据表为基准,进行填充右面的数据
right:表示以右边的数据表为基准,填充左边的数据
outer:以on的指定列的所有值为基准,填充两边的数据
inner:默认inner,相同on指定的columns下的相同values对应的左右两边的数据
1、concat拼接
pd.concat([Series1,Series2])
pd.concat([df1,df2]) -- 上下叠加,将没有的列进行填充
2、combine组合
Series1.combine_first(Series2) --用Series2的值去填充Series1中为空的值
df1.combine_first(df2) ---用df2将df1中的空值填充
df['A'] = df['A'].apply(str.upper) ---apply函数中也只输入函数名
len(df) --求df的长度
len(df['a'].unique()) --查看a列中不重复数据的多少
Series.duplicated() --返回一列True/False的Series
Series.drop_duplicates() --删除重复值
df.drop_duplicates('a',keep='first/last')
df.drop_duplicates() --删除完全重复的行
参数:'a'表示以a列为基准,删除重复值
first表示保留第一个,last表示保留最后一个
data_list = pd.date_range(start,end,period='D',freq)
period='D',以天为单位
freq = 'W' 以周为单位
freq = 'W-Mon'以每周一位单位
freq = '5H' 以5h为单位
以data_range作为索引提取数据比较简单
df[datetime(2017,9,1)]
df['2017-09-01']
df['20170901']
df['201709']
对时间序列数据进行分组聚合操作:
s1.resample('M').mean() --以月为单位进行采样,然后求每组的平均值
s1.resample('H').ffill() --前项填充
s1.resample('H').bfill() --后项填充
补充:1)jupyter中可以执行linux命令,太棒了!
!ls
!more xxx.csv
!pwd 等等
2)jupyter 查看函数帮助的快捷键:摁住shift + tab 棒!!!
pd.DataFrame()函数是创建一个二维表
传入的两个参数:
第一个是所存放的数据
np.random.rand(100,4) 这个的意思是生成指定维度的的[0,1)范围之间的随机数,生成为维度100行4列的二维数组,下面的例子你可以作为参照
请点击输入图片描述
而之后的
cumsum()其实第一个参数本来传入的需要是数组,然后计算轴向元素累加和,
而你的例子中进行了简化,即np.cumsum(a, 0) == a.cumsum(0)
其中的传入参数0表示axis=0,即按照行累加,例子中即随机数的累加
举个例子a =[ [(1,2,3)],
[(4,5,6)] ]
a.cumsum(0)就是
[ [(1,2,3)],
[(5,7,9)] ]~~~~~~~~(1+4)(2+5)(3+6)
第二个参数columns是DataFrame的列名分别为ABCD
import pandas as pd
Python中import的as语法,pd作为pandas的简写,
后续对pandas的引用,可以直接使用pd
在Python中,pandas是基于NumPy数组构建的,使数据预处理、清洗、分析工作变得更快更简单。pandas是专门为处理表格和混杂数据设计的,而NumPy更适合处理统一的数值数组数据。
使用下面格式约定,引入pandas包:
pandas有两个主要数据结构:Series和DataFrame。
Series是一种类似于一维数组的对象,它由 一组数据 (各种NumPy数据类型)以及一组与之相关的 数据标签(即索引) 组成,即index和values两部分,可以通过索引的方式选取Series中的单个或一组值。
pd.Series(list,index=[ ]) ,第二个参数是Series中数据的索引,可以省略。
Series类型索引、切片、运算的操作类似于ndarray,同样的类似Python字典类型的操作,包括保留字in操作、使用.get()方法。
Series和ndarray之间的主要区别在于Series之间的操作会根据索引自动对齐数据。
DataFrame是一个表格型的数据类型,每列值类型可以不同,是最常用的pandas对象。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)。DataFrame中的数据是以一个或多个二维块存放的(而不是列表、字典或别的一维数据结构)。
pd.DataFrame(data,columns = [ ],index = [ ]) :columns和index为指定的列、行索引,并按照顺序排列。
如果创建时指定了columns和index索引,则按照索引顺序排列,并且如果传入的列在数据中找不到,就会在结果中产生缺失值:
数据索引 :Series和DataFrame的索引是Index类型,Index对象是不可修改,可通过索引值或索引标签获取目标数据,也可通过索引使序列或数据框的计算、操作实现自动化对齐。索引类型index的常用方法:
重新索引 :能够改变、重排Series和DataFrame索引,会创建一个新对象,如果某个索引值当前不存在,就引入缺失值。
df.reindex(index, columns ,fill_value, method, limit, copy ) :index/columns为新的行列自定义索引;fill_value为用于填充缺失位置的值;method为填充方法,ffill当前值向前填充,bfill向后填充;limit为最大填充量;copy 默认True,生成新的对象,False时,新旧相等不复制。
删除指定索引 :默认返回的是一个新对象。
.drop() :能够删除Series和DataFrame指定行或列索引。
删除一行或者一列时,用单引号指定索引,删除多行时用列表指定索引。
如果删除的是列索引,需要增加axis=1或axis='columns'作为参数。
增加inplace=True作为参数,可以就地修改对象,不会返回新的对象。
在pandas中,有多个方法可以选取和重新组合数据。对于DataFrame,表5-4进行了总结
适用于Series和DataFrame的基本统计分析函数 :传入axis='columns'或axis=1将会按行进行运算。
.describe() :针对各列的多个统计汇总,用统计学指标快速描述数据的概要。
.sum() :计算各列数据的和
.count() :非NaN值的数量
.mean( )/.median() :计算数据的算术平均值、算术中位数
.var()/.std() :计算数据的方差、标准差
.corr()/.cov() :计算相关系数矩阵、协方差矩阵,是通过参数对计算出来的。Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。DataFrame的corr和cov方法将以DataFrame的形式分别返回完整的相关系数或协方差矩阵。
.corrwith() :利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算),传入一个DataFrame则会计算按列名配对的相关系数。
.min()/.max() :计算数据的最小值、最大值
.diff() :计算一阶差分,对时间序列很有效
.mode() :计算众数,返回频数最高的那(几)个
.mean() :计算均值
.quantile() :计算分位数(0到1)
.isin() :用于判断矢量化集合的成员资格,可用于过滤Series中或DataFrame列中数据的子集
适用于Series的基本统计分析函数,DataFrame[列名]返回的是一个Series类型。
.unique() :返回一个Series中的唯一值组成的数组。
.value_counts() :计算一个Series中各值出现的频率。
.argmin()/.argmax() :计算数据最大值、最小值所在位置的索引位置(自动索引)
.idxmin()/.idxmax() :计算数据最大值、最小值所在位置的索引(自定义索引)
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv()、read_table()、to_csv()是用得最多的。
在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载、清理、转换以及重塑。
在许多数据分析工作中,缺失数据是经常发生的。对于数值数据,pandas使用浮点值NaN(np.nan)表示缺失数据,也可将缺失值表示为NA(Python内置的None值)。
替换值
.replace(old, new) :用新的数据替换老的数据,如果希望一次性替换多个值,old和new可以是列表。默认会返回一个新的对象,传入inplace=True可以对现有对象进行就地修改。
删除重复数据
利用函数或字典进行数据转换
df.head():查询数据的前五行
df.tail():查询数据的末尾5行
pandas.cut()
pandas.qcut() 基于分位数的离散化函数。基于秩或基于样本分位数将变量离散化为等大小桶。
pandas.date_range() 返回一个时间索引
df.apply() 沿相应轴应用函数
Series.value_counts() 返回不同数据的计数值
df.aggregate()
df.reset_index() 重新设置index,参数drop = True时会丢弃原来的索引,设置新的从0开始的索引。常与groupby()一起用
numpy.zeros()
利用Python的pandas数据结构来读取excel表格的数据,部分代码如下:
#-*- coding:utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
catering_data="catering_sale.xls"
data=pd.read_excel(catering_data,index_col=u'日期')
#读取数据,指定"日期"列为索引列
大多数书上都是这样写的,但是在Python2.7上运行时出现错误。(没有在Python3.x版本试过)
出现了如下问题:
这里写图片描述
使用help(pd.read_excel)发现参数中有必选参数sheetname,加入到函数中,代码如下:
#-*- coding:utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
catering_data="catering_sale.xls"
data=pd.read_excel(catering_data,sheetname=0,index_col=u'日期')
运行成功。
sheetname=0 的意思是:读取xls文件中的第一个表格。(假设文件中有很多个表格)
另外,也可以将文件转换成csv格式,就不需要这个参数了。代码如下:
catering_data="catering_sale.csv"
data=pd.read_csv(catering_data)