相关推荐
数据分析——Pandas(进阶)
2024-11-10 22:39

编辑器:jupyter notebook

数据分析——Pandas(进阶)

 
  • 生成100行3列[60,100)的随机整数
 

 

  • 增加一列数据
 

 

  • 增加一行数据
 

 

 
语文      99.0
数学      99.0
英语      99.0
总成绩    564.0
dtype: float64
 
语文      60.0
数学      61.0
英语      60.0
总成绩    414.0
dtype: float64
 
语文      82.0
数学      81.0
英语      80.0
总成绩    484.0
dtype: float64
 

 
0    492.0
dtype: float64
 

492.0

  • 如存在多个众数,则求它们的均值
 
0    90.0
dtype: float64
  • 生成2行10列[60,100)的随机整数
 
array([[ 62,  90,  66,  69,  90,  96,  87,  90,  91,  88],
       [ 74,  93,  76,  99,  65,  78,  72,  75,  73,  65],
       [113,  80,  71,  84,  80,  96, 108, 108,  96,  90],
       [106, 118, 107,  76,  73,  96,  86,  65, 102,  99]])
 

 

 

  • 随机生成指定均值及标准差的数组
  • 均值为90,标准差为2000,100个元素
 

 

  • 计算25%的分位数,Q1,下四分位数
 

2808.5524129961677 

  • 计算75%的分位数,Q3,上四分位数
 
2808.5524129961677
  • 计算四分位距,Q3-Q1
 
  • 异常值检测
  • 设定上限值和下限值
 
  • 异常值筛选
 
  • 异常值处理
  • 如高于上限值,则使用上限值替换
  • 如低于下限值,则使用下限值替换
 

 
  • 生成5行5列[0, 1)的随机小数
 

 

  • 所有列保留2位小数
 

 

  • 使用字典方法
  • A列保留1位小数
  • B列保留2位小数
 

 

  • 使用Series方法
  • C列保留1位小数
  • D列保留2位小数
 

 

2.1  apply方法

  • Series和Dataframe对象均有此方法
  • 指定列保留0位小数的百分比
 
0    69%
1    46%
2    19%
3     5%
4    45%
Name: A, dtype: object
  • 指定列保留2位小数的百分比
 
0    68.96%
1    45.66%
2    18.66%
3     4.97%
4    44.94%
Name: A, dtype: object
  • 所有列保留2位小数的百分比
 
TypeError: unsupported format string passed to Series.__format__
 

 

 2.2  applymap方法

  • Dataframe对象的方法,不支持单列的操作
  • 所有列保留2位小数的百分比
 

 2.3  map方法

  • Series对象的方法,不支持多列的操作
  • 指定列保留2位小数的百分比
 
0    68.96%
1    45.66%
2    18.66%
3     4.97%
4    44.94%
Name: A, dtype: object
  • map字典操作,字段值映射
 

 

 

  • 生成10行5列[1000, 10000)的随机整数
 

 

 
0    6,202
1    7,905
2    6,277
3    1,032
4    6,132
5    6,689
6    4,470
7    8,991
8    8,596
9    6,119
Name: A, dtype: object
 

 

  • groupby函数 + 聚合函数

1.1  一列分组一列聚合

 

 

 1.2  一列分组多列聚合

 

 1.3  多列分组多列聚合

 

 

 

 
办公
                 订单编号 一级分类
0     US-2021-1357144   办公
1     CN-2021-1973789   办公
2     CN-2021-1973789   办公
3     US-2021-3017568   办公
4     CN-2020-2975416   办公
...               ...  ...
9948  CN-2018-1902956   办公
9949  CN-2018-1902956   办公
9951  CN-2019-3665640   办公
9955  CN-2021-4318875   办公
9958  CN-2018-3557528   办公
[5687 rows x 2 columns]
----------------------------------------------------------------------------------------------------
家具
                 订单编号 一级分类
7     CN-2019-4497736   家具
24    US-2020-4150614   家具
25    US-2020-4150614   家具
30    US-2020-4150614   家具
33    CN-2021-3230180   家具
...               ...  ...
9931  CN-2020-3557528   家具
9942  CN-2019-3438839   家具
9950  CN-2018-1902956   家具
9953  CN-2021-5146329   家具
9956  CN-2021-4318875   家具
[2244 rows x 2 columns]
----------------------------------------------------------------------------------------------------
技术
                 订单编号 一级分类
5     CN-2019-4497736   技术
10    CN-2018-4195213   技术
11    CN-2021-5801711   技术
13    CN-2019-2752724   技术
14    CN-2019-2752724   技术
...               ...  ...
9935  CN-2019-1364986   技术
9939  US-2021-4180783   技术
9952  US-2018-5128542   技术
9954  CN-2021-4318875   技术
9957  CN-2021-4318875   技术
[2028 rows x 2 columns]
----------------------------------------------------------------------------------------------------

3.1  指定列使用多个聚合函数

 

 3.2  指定列使用指定聚合函数

 

 

 

 

 

  • 统计频数最高(行计数最多)的二级分类
  • 以及总数量和总金额
 
'装订机'
 

  • 以一级分类为分组,统计销售数量最多的二级分类
 
'装订机'
 
一级分类
办公    装订机
家具     椅子
技术     电话
dtype: object
  • pd.Dataframe.transform()
  • 统计各省的金额以及占所属大区的比例
 

 

 

 

6.1  groupby+字典+聚合函数

 

 

 

6.2  groupby+Series+聚合函数

 

 

 

 

 

 

  • 主要为了提升运算性能
 
大区    object
金额     int64
dtype: object
  • 测试非category数据类型的运算时间
 
Wall time: 138 ms

Out[34]:

大区
东北    96128025
中南    96518713
华东    96023787
华北    96369953
西北    96451240
西南    95335807
Name: 金额, dtype: int64
  • 测试category数据类型的运算时间
 
Wall time: 32 ms

Out[36]:

大区
东北    96128025
中南    96518713
华东    96023787
华北    96369953
西北    96451240
西南    95335807
Name: 金额, dtype: int64
 

1.1  shift函数

  • 销量增长率 = (本期销量 - 上期销量) / 上期销量
 

 

 1.2  diff函数

  • 偏移后计算差异
 

 

 1.3  pct_change函数

  • 偏移后计算差异百分比
 

 

 1.4  rolling函数

  • 滚动计算,计算近3天平均销量
 

 

 

 

 2.1  cut函数

2.1.1  指定箱数,等距分箱

  • 10组
 
[36.4, 48.2)        17
[107.2, 119.118)    15
[1.0, 12.8)         11
[24.6, 36.4)        10
[71.8, 83.6)        10
[60.0, 71.8)         9
[95.4, 107.2)        9
[48.2, 60.0)         7
[12.8, 24.6)         6
[83.6, 95.4)         6
Name: 等距分箱, dtype: int64

2.1.2  指定区间分箱

  • [0, 60, 80, 100, 120]
 
[0, 60)       51
[100, 120)    22
[60, 80)      17
[80, 100)     10
Name: 指定区间分箱, dtype: int64
 
不及格    51
优秀     22
一般     17
良好     10
Name: 指定区间分箱, dtype: int64

2.2  qcut函数

2.2.1  指定分位数,等频分箱

  • 4组
 
(0.999, 34.75]    25
(34.75, 55.5]     25
(55.5, 94.25]     25
(94.25, 119.0]    25
Name: 等频分组, dtype: int64

2.2.2  指定分位数区间分箱

  • [0, 0.3, 0.5, 0.75, 1]
 
(0.999, 38.7]     30
(55.5, 94.25]     25
(94.25, 119.0]    25
(38.7, 55.5]      20
Name: 指定分位数区间分箱, dtype: int64
 
 
  • split方法,已确定拆分结果的列数
  • 只将省份和城市拆分为新字段
 

 

 

 
0    [广东省, 深圳市, 光明区, 公明街道]
1    [广东省, 深圳市, 光明区, 公明街道]
2    [广东省, 深圳市, 光明区, 公明街道]
3    [广东省, 深圳市, 宝安区, 沙井街道]
4    [广东省, 深圳市, 宝安区, 石岩街道]
Name: 收货地址, dtype: object
  • 将拆分结果全部转为新字段
 

  • split和join方法,不确定拆分结果的列数
 

 

 

 

 

 

4.1  stack方法

  • 将除索引列外的字段转为最内层的行索引
 

 

 

 

 4.2  melt方法

  • 宽表转为长表
 

 

 

5.1  unstack方法

  • 将最内层的行索引转为字段
 

 

 

 
Index(['手机', '电脑'], dtype='object', name='品类')
 

 

 5.2  pivot方法

  • 透视列,没有聚合功能
 

 

 

 

 

 
 

 
 

 
 

 

 
 

 

1.1  左连接

 

 1.2  右连接

 

1.3  外连接

 

 1.4  内连接

 

 1.5  交叉连接

  • 笛卡尔积
 

 

 

 

 

2.1  左连接

 

 2.2  右连接

 

 2.3  外连接

 

 2.4  内连接

 

 

 

 

3.1  外连接

 

 3.2  内连接

 

 

 

 

 

表的横向合并:merge方法(支持交叉连接,pd.merge 或 df.merge;join方法(不支持交叉连接,连式写法 df.join

表的纵向合并:concat方法(横向合并仅支持内外连接)或 append方法

 

 
 
 
  • orient: {'split', 'records', 'index', 'columns', 'values', 'table'}
 
 
  • 同一工作簿下的不同工作表
 

 

 
 
 

 

 

 

 

 

 

 
年     月 
2020  1     1
      2     1
      3     1
      6     1
      9     1
      12    1
dtype: int64
  • 针对日期字段分组聚合的快捷方式
  • 重采样:升采样,降采样
  • 升采样:低频率到高频率采样
  • 降采样:高频率到低频率采样
  • Time series / date functionality — pandas 1.5.0 documentation
  • 时间频率
  • AS: 年初
  • A: 年末
  • YS: 年初
  • Y: 年末
  • QS: 季初
  • Q: 季末
  • MS: 月初
  • M: 月末
  • W: 周
  • D: 日
  • H: 时
  • T: 分
  • min: 分
  • S: 秒
  • W-SUN: 周(周日结束)Sunday
  • W-MON: 周(周一结束)Monday
  • W-TUE: 周(周二结束)Tuesday
  • W-WED: 周(周三结束)Wednesday
  • W-THU: 周(周四结束)Thursday
  • W-FRI: 周(周五结束)Friday
  • W-SAT: 周(周六结束)Saturday
 

 

4.1  设置日期为索引

 

4.2  按月统计数据

 

 

4.3  按季统计数据

 

4.4  按年统计数据

 

4.5  日期切片操作

 
  • open(开始值,开盘价)
  • high(最高值)
  • low(最低值)
  • close(结束值,收盘价)
 

 

  • 随机抽样
 

 

 6.1  随机抽取1个

 

 6.2  随机抽取50%

 

 6.3  允许重复抽样

 

 6.4  按权重抽样

 
贵妃   权重
貂蝉   4     395
西施   3     293
王昭君  2     200
杨玉环  1     112
dtype: int64

6.5  设置随机种子

 

 
  • 获取当前时间
 
<Arrow [2022-09-27T15:48:40.889286+08:00]>
  • 从字符串解析日期
 
<Arrow [2021-02-14T12:12:00.210000+00:00]>
  • 实例化日期
 
<Arrow [2021-02-14T00:00:00+00:00]>
  • 获取当前时间
  • 获取年份部分
  • 获取日期部分
  • 获取时间部分
  • 向后偏移3周
  • 明年的上月的今天
  • 向前偏移1小时
  • 向后偏移2小时
 
(2022,
 datetime.date(2022, 9, 27),
 datetime.time(15, 55, 43, 706035),
 <Arrow [2022-10-18T15:55:43.706035+08:00]>,
 <Arrow [2023-08-27T15:55:43.706035+08:00]>,
 <Arrow [2022-09-27T14:55:43.706035+08:00]>,
 <Arrow [2022-09-27T17:55:43.706035+08:00]>)
  • 开始:2021-01-01,结束:2021-01-31,间隔5天
 
DatetimeIndex(['2021-01-01', '2021-01-06', '2021-01-11', '2021-01-16',
               '2021-01-21', '2021-01-26', '2021-01-31'],
              dtype='datetime64[ns]', freq='5D')
  • 开始:2021-01-01,间隔2天,数目5个
 
DatetimeIndex(['2021-01-01', '2021-01-03', '2021-01-05', '2021-01-07',
               '2021-01-09'],
              dtype='datetime64[ns]', freq='2D')
  • 开始:2021-01-01,结束:2021-01-31,间隔1周
 
DatetimeIndex(['2021-01-03', '2021-01-10', '2021-01-17', '2021-01-24',
               '2021-01-31'],
              dtype='datetime64[ns]', freq='W-SUN')
  • 开始:2021-01-01,间隔3小时,数目8个
 
DatetimeIndex(['2021-01-01 00:00:00', '2021-01-01 03:00:00',
               '2021-01-01 06:00:00', '2021-01-01 09:00:00',
               '2021-01-01 12:00:00', '2021-01-01 15:00:00',
               '2021-01-01 18:00:00', '2021-01-01 21:00:00'],
              dtype='datetime64[ns]', freq='3H')
  • 开始:2021-01-01 09:00,间隔1分钟,9点开始,数目12个
 
DatetimeIndex(['2021-01-01 09:00:00', '2021-01-01 09:01:00',
               '2021-01-01 09:02:00', '2021-01-01 09:03:00',
               '2021-01-01 09:04:00', '2021-01-01 09:05:00',
               '2021-01-01 09:06:00', '2021-01-01 09:07:00',
               '2021-01-01 09:08:00', '2021-01-01 09:09:00',
               '2021-01-01 09:10:00', '2021-01-01 09:11:00'],
              dtype='datetime64[ns]', freq='T')
  • 开始:2021-01-01,结束:2021-12-31,间隔1月,月末最后1天
 
DatetimeIndex(['2021-01-31', '2021-02-28', '2021-03-31', '2021-04-30',
               '2021-05-31', '2021-06-30', '2021-07-31', '2021-08-31',
               '2021-09-30', '2021-10-31', '2021-11-30', '2021-12-31'],
              dtype='datetime64[ns]', freq='M')
  • 开始:2021-01-01,间隔1年,年末最后1天,数目6个
 
DatetimeIndex(['2021-12-31', '2022-12-31', '2023-12-31', '2024-12-31',
               '2025-12-31', '2026-12-31'],
              dtype='datetime64[ns]', freq='A-DEC')
  • 开始:2021-01-01,间隔1年,年初最后1天,数目6个

 
DatetimeIndex(['2021-01-01', '2022-01-01', '2023-01-01', '2024-01-01',
               '2025-01-01', '2026-01-01'],
              dtype='datetime64[ns]', freq='AS-JAN')
 

 

3.1  时间序列加减,天为单位

 

3.2  时间序列加减,月为单位

 

3.3  时间序列加减,周为单位

 

3.4  向前(未来)偏移

  • 得到最近的月末时间点
 

3.5  向后(过去)偏移

  • 得到最近的季末时间点
 

 3.6  实例化日期

 
 

 

 
 
 

 
array([[<AxesSubplot:title={'center':'克拉'}>]], dtype=object)

  • 克拉分布
 

 

  • 各纯净度的价格分布
 
<AxesSubplot:title={'center':'价格'}, xlabel='纯净度'>

  • 各纯净度的克拉分布
 
<AxesSubplot:title={'center':'克拉'}, xlabel='纯净度'>

 

  • 单个维度,各纯净度的频数分布
 

  • 多个维度,各纯净度各颜色的频数分布
 
<AxesSubplot:xlabel='纯净度'>

 

 

 

 

 


    以上就是本篇文章【数据分析——Pandas(进阶)】的全部内容了,欢迎阅览 ! 文章地址:http://yejunbin01.xhstdz.com/quote/69674.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://yejunbin01.xhstdz.com/mobile/ , 查看更多   
发表评论
0评