Pandas知识点

基本操作

索引

a.iloc[0,2]=a.iloc[0][2] (右边的更常用和标准,因为多层索引的问题)取第一行第三列的数
取列用a[“b”]或者a.b

切片

  • 显式索引(终点也包括)
    a.loc[1]
    a.loc[1:2]
    隐式索引
    a.iloc[1]
    a.iloc[1:3]

过滤

迭代

  • Series
for i in a.iteritems():
	print(i)
#index和values都会打印出来
  • DataFrame
for i,j in b.iteritems():
	print(i)
	print(j)
#先按列再按行迭代
for i,j in b.iterrows():
	print(i)
	print(j)
#按行再按列进行迭代

排序

  • Series
    a1.sort_values()
    a1.sort_index()
  • DataFrame
a2.sort_values(by='column2')[["column1","column2"]]
a2.sort_index(axis =1)

Pandas的运算

自定义索引的存在,使得索引对齐非常重要

和常数运算

同种类型之间的运算

找不到索引匹配的值定为NaN

  • Series之间
    a + b
    a.add(b,fill_value=0)
  • DataFrame之间
    d+c
  • Series和DataFrame之间
    广播机制(默认纵向复制)
    a+a[“b”]会产生全NaN(因为默认纵向复制),此时用a.add(a[“b”],axis=1)

Pandas的多级索引

  • 创建
a1 = pd.Series(range(0,4),index = [[m1,m1,m2,m2][L1,L2,L1,L2]])
#DataFrame与Series类似

#a1.index会显示MultiIndex对象(包含levels和labels)
a.index.name = ["class","gender"] #给多层索引增加名字

#索引的单独创建
in1 = pd.MultiIndex.from_arrays([["class1","class2"],["m1""m2"]])
in1 = pd.MultiIndex.from_tuples([["class1","m1"],["class2","m2"]])
df1 =pd.Series([100,200],index=in1)
  • 结构转换
a.unstack() #Series转换为dataframe,默认把最里面转换为列标
a.unstack(level=0)#强制转换最外层
a.unstack().stack()#转换回去

a.reset_index()#所有多层索引彻底转换为横向
a.set_index("class","gender")#变回来(设定索引)
  • 切片
a["class1","man"]#只能从外往里层索引
a["class1":"class2"]
a["class1","class2"]
df1["class1","man"]["x"]

统计函数和groupby

统计函数

  • count,sum,prod,min,max,first,last,mean,median,std,var,mad(均值绝对偏差)
    默认对列进行统计(axis=0),可显式制定(axis=1)
  • describe()标准集成统计函数,agg()自定义集成哪些统计函数

最有用的数据分析函数groupby

  • 对数据框a有
    key,data___split___appy___combine
    groupby理解为将a列作为一个新的索引,数据框成为一个二层索引的数据框
a.groupby('a')#以"a"列进行groupby(相同元素的在一起)
#groupby迭代(常用)
for i in a.groupby("a"):
	print(i[1])
	print()
a.groupby("a","b")
a.groupby("a").get_group("j")#切片
  • groupby之后仍然继承dataframe的特性,可使用统计函数等,但是按照部分进行统计

  • 过滤

def g1(x):
	return x["b"].sum()>3
a1.filter(g1)#找出满足条件的组
  • transform和apply
    apply更好用
a1.transform(lambda: x:x.mean())#保持原有索引结构,同时强制保持原有除去groupby列的剩余列。
a1.apply(lambda: x:x.mean())#对整个数据框,不会除去groupby列,还可切片,很灵活,但是效率慢。要主要apply用在Series还是DataFrame上
  • 自定义分组
g1 = [0,0,0,1,1,1]
a.groupby(g1)

g1 = a["b"]%2
a.groupby(g1)

案例:在线交易行为统计分析(二)

时间数据分析

  • 时间戳——timestamp
  • 时间间隔——timedelta
  • 定义

    • 时间戳 pd.to_datetime(“20140404”)
    • 时间间隔 pd.to_timedelta(15,“D”)
    • 时间戳序列(DatetimeIndex) pd.date_range(“1/1/2011”,periods=10,freq=“5m”)
  • 重采样(resample)

    • 向上采样(时间尺度更细)
    • 向下采样(时间尺度变宽)
#需要索引为时间序列
f1.resample("2D",closed="right").sum()#运行索引重复
f1.asfreq("10H")#asfreq并不做分组,只是单纯的采样,会抛弃样本以外的结果。且不允许索引重复
  • 分组采样
f1.index.week
#Group函数专门用来生成时间分组序列的函数,默认情况下是对数据框的键进行处理
#相比resample,Grouper函数功能更强大
f1.groupby(["a",pd.Grouper(freq="5D")])

案例:在线交易行为统计分析(三)

案例:菜鸟仓储需求分析

数据的合并与连接

Pandas数据文件读取与异常处理

案例:最后一公里配送问题

字符串数据的处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值