持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情
今天是十月更文计划第四天,第六篇
Pandas
今天分享pandas实战的内容,是一次pandas实战:
pandas常用的数据结构有四种:
1)Series,带标签的一维数组;
2)DatetimeIndex,时间序列;
3)DataFrame,带标签且大小可变的二维表格结构;
4)Panel,带标签且大小可变的三维数组。
1、一维数组与常用操作
Series是pandas提供的一维数组,由索引和值两部分组成,是一个类似于字典的结构。
其中值的类型可以不同,如果在创建时没有明确指定索引则会自动使用从0开始的非负整数作为索引。
s1 = pd.Series(range(1, 20, 5))
# 使用字典创建Series,使用字典的“键”作为索引
s2 = pd.Series({'语文':90, '数学': 92, 'Python': 98, '物理':87, '化学': 92})
# 修改指定索引对应的值
s1[3] = -17
s2['语文'] = 94
print('s1原始数据'.ljust(20, '='))
print(s1)
print(abs(s1))
abs用来求平均值,输出的结果如下:
print('s2原始数据'.ljust(20, '='))
print(s2)
print('s2数据的直方图'.ljust(20,'='))
s2.hist() #得到直方图,直方图是统计次数的
plt.show() #显示这个直方图
print('s2的中值'.ljust(20, '='))
print(s2.median())
print('s2中最小的2个值'.ljust(20, '='))
print(s2.nsmallest(2))
输出的结果如下:
print('两个Series对象相加'.ljust(20,'='))
print(pd.Series(range(5))+pd.Series(range(5,10)))
print('每个值的平方对5的余数'.ljust(20,'='))
print(pd.Series(range(5)).pipe(lambda x,y,z:(x**y)%z, 2, 5))
print('每个值加3之后再乘以3'.ljust(20,'='))
print(pd.Series(range(5)).pipe(lambda x:x+3).pipe(lambda x:x*3))
pipe()方法可以实现函数链式调用的功能,输出的结果如下:
时间序列索引操作:
print('间隔5天'.ljust(30, '='))
print(pd.date_range(start='20210901', end='20210930', freq='5D'))
print('间隔1周'.ljust(30, '='))
print(pd.date_range(start='20210901', end='20210930', freq='W'))
print('间隔2天,5个数据'.ljust(30, '='))
print(pd.date_range(start='20210901', periods=5, freq='2D'))
print('间隔3小时,8个数据'.ljust(30, '='))
print(pd.date_range(start='20210901', periods=8, freq='3H'))
start指定起始日期,end指定结束日期,periods指定产生的数据数量
freq指定间隔,D表示天,W表示周,H表示小时
M表示月末最后一天,MS表示月初第一天
T表示分钟,Y表示年末最后一天,YS表示年初第一天
输出的结果如下: