当前位置: 首页 > news >正文

Pandas常用数据类型

扩展库pandas常用的数据结构如下:

(1)Series:带标签的一维数组

(2)DatetimeIndes:时间序列

(3)DateFrame:带标签且大小可变的二维表格结构

(4)Panel:带标签且大小可变的三维数组

1 一维数组与常用操作

Series由索引和值两部分组成,是一个类似于字典的结构。其中值的类型可以不同,如果在创建时没有明确指定索引,则会自动使用从0开始的非负整数作为索引。

import pandas as pd
import matplotlib.pyplot as plt# 设置输出结果列对齐
pd.set_option('display.unicode.ambiguous_as_wide',True)
pd.set_option('display.unicode.east_asian_width',True)# 自动创建从0开始的非负整数索引
s1=pd.Series(range(1,20,5))
# 使用字典创建Series,使用字典的“键”作为索引
s2=pd.Series({'语文':90,'数学':92,'Python':98,'物理':87,'化学':92})
# 修改指定索引对应的值
s1[3]=-17
s2['语文']=94print('s1原始数据'.ljust(20,'='))
print(s1,'\n')
print('对s1所有数据求绝对值'.ljust(20,'='))
print(abs(s1),'\n')
print('s1的每行索引前面加上数字2'.ljust(20,'='))
print(s1.add_prefix(2),'\n')print('s2原始数据'.ljust(20,'='))
print(s2,'\n')
print('s2数据的直方图'.ljust(20,'='))
s2.hist()
plt.show()
print('s2的每行索引后面加上_张三'.ljust(20,'='))
print(s2.add_suffix('_张三'),'\n')
print('s2最大值的索引'.ljust(20,'='))
print(s2.idxmax(),'\n')
print('测试s2的值是否在指定区间内'.ljust(20,'='))
print(s2.between(90,94,inclusive=True),'\n')
print('查看s2中90分以上的数据'.ljust(20,'='))
print(s2[s2>90],'\n')
print('查看s2中大于中值的数据'.ljust(20,'='))
print(s2[s2>s2.median()],'\n')
print('s2与数字之间的运算'.ljust(20,'='))
print(round((s2**0.5)*10,1),'\n')
print('s2中最小的2个值'.ljust(20,'\n'))
print(s2.nsmallest(2),'\n')# 两个等长Series对象之间可以进行四则运算和幂运算
# 只对两个Series对象中都有的索引对应的值进行计算
# 非共同索引对应的值为空值
print('两个Series对象相加'.ljust(20,'='))
print(pd.Series(range(5))+pd.Series(range(5,10)),'\n')# pipe()方法可以实现函数链式调用的功能
print('每个值加3之后再乘以3'.ljust(20,'='))
print(pd.Series(range(5)).pipe(lambda x:x+3).pipe(lambda x:x*3),'\n')
print('每个值的平方对5的余数'.ljust(20,'='))
print(pd.Series(range(5)).pipe(lambda x,y,z:(x**y)%z,2,5),'\n')# apply()方法用来对Series对象的值进行函数运算
print('每个值加3'.ljust(20,'='))
print(pd.Series(range(5)).apply(lambda x:x+3),'\n')print('标准差、无偏方差、无偏标准差'.ljust(20,'='))
print(pd.Series(range(5)).std(),'\n')
print(pd.Series(range(5)).var(),'\n')
print(pd.Series(range(5)).sem(),'\n')print('检查是否存在等价于True的值'.ljust(20,'='))
print(any(pd.Series([3,0,True])),'\n')print('查看是否所有值都等价于True'.ljust(20,'='))
print(all(pd.Series([3,0,True])))

2 时间序列与常用操作

使用pandas的date_range()函数生成时间序列对象:

date_range(start=None,end=None,periods=None,freq='D',tz=None,normalize=False,name=None,closed=None,**kwargs)

(1)start和end用来指定起止日期时间

(2)periods用来指定要生成的数据数量

(3)freq用来指定时间间隔,默认为'D',表示相邻两个日期之间相差一天

另外,pandas的Timestamp类也支持很多与日期时间有关的操作

import pandas as pd# start指定起日期,end指定结束日期,periods指定生成的数据数量
# freq指定时间间隔,D表示天,W表示周,H表示小时
# M表示月末最后一天,MS表示月初第一天
# T表示分钟,Y表示年末最后一天,YS表示年初第一天
print('间隔5天'.ljust(30,'='))
print(pd.date_range(start='20190601',end='20190630',freq='5D'),'\n')print('间隔1周'.ljust(30,'='))
print(pd.date_range(start='20190601',end='20190630',freq='W'),'\n')print('间隔2天,5个数据'.ljust(30,'='))
print(pd.date_range(start='20190601',periods=5,freq='2D'),'\n')print('间隔3小时,8个数据'.ljust(30,'='))
print(pd.date_range(start='20190601',periods=8,freq='3H'),'\n')print('3:00开始,间隔1分钟,12个数据'.ljust(30,'='))
print(pd.date_range(start='201906010300',periods=12,freq='T'),'\n')print('间隔1月,月末最后一天'.ljust(30,'='))
print(pd.date_range(start='20190101',end='20191231',freq='M'),'\n')print('间隔1年,6个数据,年末最后一天'.ljust(30,'='))
print(pd.date_range(start='20190101',periods=6,freq='Y'),'\n')print('间隔1年,6个数据,年初第1天'.ljust(30,'='))
print(pd.date_range(start='20190101',periods=6,freq='YS'),'\n')# 使用日期时间做索引,创建Series对象
data=pd.Series(index=pd.date_range(start='20190701',periods=24,freq='H'),data=range(24))
print('前5条数据'.ljust(30,'='))
print(data[:5],'\n')print('3小时重采样,计算均值'.ljust(30,'='))
print(data.resample('3H').mean(),'\n')print('5小时重采样,求和'.ljust(30,'='))
print(data.resample('5H').sum(),'\n')# OHLC分别表示OPEN、HIGH、LOW、CLOSE
print('5小时重采样,统计OHLC值'.ljust(30,'='))
print(data.resample('5H').ohlc(),'\n')print('所有日期替换为第2天'.ljust(30,'='))
data.index=data.index+pd.Timedelta('1D')
print(data[:5],'\n')print('查看指定日期是周几'.ljust(30,'='))
print(pd.Timestamp('20190323').day_name(),'\n')print('查看指定日期时间所在年是否为闰年'.ljust(30,'='))
print(pd.Timestamp('20190930').is_leap_year,'\n')print('查看指定日期所在的季度和月份'.ljust(30,'='))
day=pd.Timestamp('20191025')
print(day.quarter,day.month,'\n')print('转换为Python的日期时间对象'.ljust(30,'='))
print(day.to_pydatetime())

3 二维数组DataFrame

每个DataFrame对象可以看作一个二维表格,由索引(index)、列名(columns)、值(values)三部分组成。

import numpy as np
import pandas as pd# 设置输出结果列对齐
pd.set_option('display.unicode.ambiguous_as_wide',True)
pd.set_option('display.unicode.east_asian_width',True)# 在[1,20]区间上生成5行3列15个随机数
# 使用index参数指定索引,columns参数指定每列标题
df=pd.DataFrame(np.random.randint(1,20,(5,3)),index=range(5),columns=['A','B','C'])
print(df,'\n')print('='*20)
# 模拟2019年7月15日某超市熟食、化妆品、日用品每小时的销量
# 使用时间序列作为索引
df=pd.DataFrame(np.random.randint(5,15,(13,3)),index=pd.date_range(start='201907150900',end='201907152100',freq='H'),columns=['熟食','化妆品','日用品'])
print(df,'\n')print('='*20)
# 模拟考试成绩,使用人名字符串作为索引
df=pd.DataFrame({'语文':[87,79,67,92],'数学':[93,89,80,77],'英语':[90,80,70,75]},index=['张三','李四','王五','赵六'])
print(df,'\n')print('='*20)
# 自动对B列数据进行扩充,使其与A列数据一样多
df=pd.DataFrame({'A':range(5,10),'B':3})
print(df)

http://www.mrgr.cn/news/83677.html

相关文章:

  • C#进阶-在Ubuntu上部署ASP.NET Core Web API应用
  • Java内存与缓存
  • 大语言模型预训练、微调、RLHF
  • Oracle重启后业务连接大量library cache lock
  • 软件架构考试基础知识 003:信号量与PV操作
  • An FPGA-based SoC System——RISC-V On PYNQ项目复现
  • traceroute原理探究
  • 在线实用工具 json格式化,base64转码,正则表达式测试工具,在线去水印,在线图片压缩,在线图片转为Excel,在线图片拾取颜色
  • 25/1/13 嵌入式笔记 继续学习Esp32
  • 【8】深入理解 Go 语言中的协程-从基础到高级应用
  • 基于Piquasso的光量子计算机的模拟与编程
  • MySQL 与 Redis 的数据一致性问题
  • 网络原理(三)—— 传输层 之 UDP 和 TCP协议
  • STM32之LWIP网络通讯设计-下(十五)
  • day09_kafka高级
  • 【1】Word:邀请函
  • Kotlin面向对象编程之构造函数
  • 【Flink】Flink内存管理
  • Redis持久化双雄
  • 免费获取2025新年跨年春节春晚烟花祝福html+js源码
  • WebGL性能检测
  • 用python实战excel和word自动化
  • halcon三维点云数据处理(十)locate_cylinder_3d
  • Pycharm 使用教程
  • 第 25 场 蓝桥入门赛
  • 简单组合逻辑