pandas教程(创建,索引,增,删,分组,排序,切分)

numpy基础

import numpy as np

np.random.random((3,2)) #生成size大小的随机浮点数阵列
np.random.sample((3,2)) #等同于np.random.random((3,2))
在这里插入图片描述
np.random.rand(d1,d2)#生成指定维度的的[0,1)范围之间的随机数,输入参数为维度
在这里插入图片描述
np.random.randn(d1,d2)生成指定维度的服从标准正态分布的随机数,输入参数为维度
在这里插入图片描述
np.random.randint(low, high = None, size = None,dtype = ‘l’)–> 返回指定size大小,范围在[low,high)的随机整数.
在这里插入图片描述
np.random.choice(a,size,p,replace)#从数组a中选取数据,数据选取的概率是数组p,选取个数是size,replace表示是否可以重复。
在这里插入图片描述

pandas数据结构(创建)

Series和DataFrame
Series 是带标签的一维数组,可存储整数、浮点数、字符串、Python 对象等类型的数据。轴标签统称为索引。调用 pd.Series 函数即可创建 Series。
s = pd.Series(data,index=index))
#data可以是标量,数组或者字典.Series 字典加上指定索引时,会丢弃与传递的索引不匹配的所有数据.没有传递轴标签时,按常规依据输入数据进行构建。标签自动对齐

import pandas as pd
s = pd.Series(5,index=['a','a','c','b','e']) #data是标量,index不能为空,标签index可以重复
print(s)
s1 = pd.Series([1,2,3,4,5],index=['a','a','c','b','e'])#data是数组,标签index可以重复
print(s1)
s2 = pd.Series({'a':1,'c':2,'b':3,'e':5})#data是字典
print(s2)

在这里插入图片描述
DataFrame
DataFrame 是由多种类型的列构成的二维标签数据结构,类似于 Excel 、SQL 表,或 Series 对象构成的字典.DataFrame 支持多种类型的输入数据.除了数据,还可以有选择地传递 index(行标签)和 columns(列标签)参数。传递了索引或列,就可以确保生成的 DataFrame 里包含索引或列。没有传递轴标签时,按常规依据输入数据进行构建。标签自动对齐。

df = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series(np.random.rand(4),index=['a','c','b','e'])})
print(df)
df2 = pd.DataFrame({'one':[1,2,3],'two':[4,5,6]},index=['a','b','c'])
print(df2)
df3 = pd.DataFrame([{'one':1,'two':2,'three':3},{'one':2,'four':3,'three':4}],index=['a','b'])
print(df3)

在这里插入图片描述

panda数据读取

更多时候,我们是把相关文件数据直接读进PANDAS中进行操作,这里介绍两种非常接近的读取方式,一种是CSV格式的文件,一种是EXCEL格式(.xlsx和xls后缀)的文件.

dfCsv = pd.read_csv('初识Pandas练习数据/流量练习数据.csv',engine='python') #读取csv
dfCsv.head()#查看前5行

在这里插入图片描述

dfExcel = pd.read_excel('初识Pandas练习数据/流量练习数据.xls',sheet_name='无线流量来源')#读取excel
dfExcel.head()#查看前5行

在这里插入图片描述

pandas数据概览和基础统计

dfCsv = pd.read_csv('初识Pandas练习数据/流量练习数据.csv',engine='python') #读取csv
dfCsv.head(n=2)#查看前2行
dfCsv.tail(n=2)#查看尾部2行
dfCsv.info() #查看数据基本信息
dfCsv.describe()#查看数据统计信息

#22行,5列,每列有多少非空数据,每列的数据类型等。
在这里插入图片描述
#数值列的统计信息,count词数,mean平均数,std标准差,min最小值,25%,50%,75%分别表示分位数,max最大数。
在这里插入图片描述
pandas数据选取(索引)
两种方式:
1.基于整数(下标)的索引。(df.iloc[行索引,列索引])行索引输入我们需要的行号,列索引输入我们需要的列号(切片)。
2.基于名称(标签)的索引。(df.loc[行标签,列标签])行标签输入我们需要的行标签,列索引输入我们需要的列标签。

dfCsv.iloc[1:3,:] #行号为1,2,所有列的数据

在这里插入图片描述

dfCsv.iloc[1:3,2:4]#行号为1,2,列号为2,3的数据

在这里插入图片描述

dfCsv.iloc[[1,2,6],[2,4]]#行号为1,2,6,列号为2,4的数据

在这里插入图片描述

dfCsv['流量来源'] #流量来源 这一列
dfCsv.loc[:,['流量来源','访客数']] #所有行,列标签是'流量来源','访客数'的数据

在这里插入图片描述

dfCsv.loc[[1,2,4],['流量来源','访客数']] #行标签是1,2,4 列标签是流量来源','访客数'的数据

在这里插入图片描述

dfCsv[dfCsv['流量来源']=='一级']
#等价
dfCsv.loc[dfCsv['流量来源']=='一级']#'流量来源']=='一级'的所有列

在这里插入图片描述

dfCsv.loc[dfCsv['流量来源'].isin(['一级','二级']),['流量来源','来源明细']]

在这里插入图片描述

dfCsv.loc[(dfCsv['访客数']>dfCsv['访客数'].mean()) & (dfCsv['客单价']>dfCsv['客单价'].mean()),['流量来源','来源明细','客单价','访客数']]

在这里插入图片描述

pandas 数据操作(增,删,改,分)

增加列

dfCsv['日期'] = '2020-08-04' #增加日期列
dfCsv['金额'] = dfCsv['客单价']*dfCsv['支付转化率'] #增加金额列
dfCsv.insert(1,'name','数据')#在指定索引位置增加name列
dfCsv.assign(金额2= lambda x:x['客单价']*x['支付转化率'])

在这里插入图片描述

增加行

#concat连接,默认操作轴axis=0
df1 = dfCsv.loc[dfCsv['流量来源']=='一级']
df2 = dfCsv.loc[dfCsv['流量来源']=='二级']
df3 = dfCsv.loc[dfCsv['流量来源']=='三级']
pd.concat([df1,df2,df3])

在这里插入图片描述
#pd.merge()
left,right分别表示左右DataFrame。
left_index,right_index表示通过行标签进行连接。也可以通过某一列连接。即left_on=‘姓名’,right_on=‘姓名’
how表示连接方式,有inner(内连接),outer(外连接),left(左连接),right(右链接)

df1 = pd.DataFrame({'语文':[60,79,89],'数学':[70,80,90],'英语':[90,60,40]},index=['李明','王华','韩华'])
df2 = pd.DataFrame({'物理':[30,10,40],'化学':[45,65,70]},index=['李明','孙磊','韩华'])
pd.merge(left=df1,right=df2,left_index=True,right_index=True,how='inner')

删除

df1.drop('李明')#删除label是李明的行,默认操作轴axis=0
df1.drop('语文',axis=1)删除label是语文的列
df1.dropna()#删除含有NaN的行
df1.dropna(subset=['物理']))#删除含有'物理'=NaN的行
df1.drop_duplicates()#删除重复行
df1.drop_duplicates(subset=['物理'])#删除'物理'行相同的重复行

排序

df1.sort_values('数学',ascending=False)#按照'数学'排序
df1.sort_values(['数学','语文'],ascending=False)#先按照'数学',后'语文'排序

在这里插入图片描述
分组

dfCsv.groupby('流量来源',as_index=False)['金额'].sum()#按流量来源分组,计算金额总数。as_index设置流量来源不作为标签

在这里插入图片描述
#groupby与apply相结合

dfCsvSort = dfCsv.sort_values(['流量来源','金额'],ascending=False)#根据'流量来源','金额'排序

def second(x):
    return x.iloc[1]
dfCsvSort.groupby('流量来源',as_index=False).apply(second)#按流量来源'分组,然后返回每组金额第二大的数据

分组和切分
pd.cut(a,bins=[],labels=[]) #a表示要切分的数组,bins=[]表示切分的方式,按照0-45,45-60,60-80,80-100切分。labels表示切分后所打上的标签。

dfCsv['分类标签'] = pd.cut(dfCsv['客单价'],bins=[0,45,60,80,100],labels=['小客单','中客单','大客单','高客单'])

在这里插入图片描述

pandas中文网
Python数据分析之Pandas
np.random用法
np.random用法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值