文章目录

  • 一、处理丢失数据
    • 1.为空值数据赋值
    • 2.删除空数据行和列
    • 3.填充所有缺失数据
    • 4.判断是否有NaN值
  • 二、统计
    • 1.平均值、求和、累加和
    • 2.shift函数
    • 3.sub函数
    • 4.apply 应用函数
    • 5.计数和众数
  • 三、数据合并
    • 1.concat函数
    • 2.SQL 样式的联合查询(merge函数)
    • 3.append函数
  • 四、分组统计

一、处理丢失数据

Pandas 使用 numpy.NaN 来表示丢失的数据,它不参与计算。

import pandas as pd
import numpy as np
dates = pd.date_range('20160301', periods=6)
df = pd.DataFrame(data=np.random.randn(6, 4), index=dates, columns=list('ABCD'))
df
>>>A         B         C         D
2016-03-01 -0.768789  1.347539  0.715367  0.581275
2016-03-02  0.163001 -0.509262 -0.615675 -0.220110
2016-03-03  0.815005 -0.343642  2.097537  1.706366
2016-03-04  0.755148  0.022449 -0.033679 -0.411535
2016-03-05  1.361040 -0.813593 -1.230564 -0.957386
2016-03-06  0.277162 -0.650544 -0.152688  1.070919
  • 添加新的列
df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])
df1
>>>A         B         C         D   E
2016-03-01 -0.768789  1.347539  0.715367  0.581275 NaN
2016-03-02  0.163001 -0.509262 -0.615675 -0.220110 NaN
2016-03-03  0.815005 -0.343642  2.097537  1.706366 NaN
2016-03-04  0.755148  0.022449 -0.033679 -0.411535 NaN

1.为空值数据赋值

df1.loc[dates[1:3], 'E'] = 1
df1
>>>A         B         C         D    E
2016-03-01 -0.768789  1.347539  0.715367  0.581275  NaN
2016-03-02  0.163001 -0.509262 -0.615675 -0.220110  1.0
2016-03-03  0.815005 -0.343642  2.097537  1.706366  1.0
2016-03-04  0.755148  0.022449 -0.033679 -0.411535  NaN

还可以这样做:

df1.loc['20160302':'20160303','E']=5

2.删除空数据行和列

不会改变df1的结构和数据

df1.dropna(how='any')
>>>A         B         C         D    E
2016-03-02  0.163001 -0.509262 -0.615675 -0.220110  1.0
2016-03-03  0.815005 -0.343642  2.097537  1.706366  1.0

可以通过axis参数来删除含有空数据的全部列

df1 = df1.dropna(axis=1)

可以通过subset参数来删除E中含有空数据的全部行

df1 = df1.dropna(subset=["E"])

3.填充所有缺失数据

同样不改变df1的数据和结构

df1.fillna(value=5)
>>>A         B         C         D    E
2016-03-01 -0.768789  1.347539  0.715367  0.581275  5.0
2016-03-02  0.163001 -0.509262 -0.615675 -0.220110  1.0
2016-03-03  0.815005 -0.343642  2.097537  1.706366  1.0
2016-03-04  0.755148  0.022449 -0.033679 -0.411535  5.0

4.判断是否有NaN值

NaN, Not a Number, NaN是浮点数的一个值,代表“不是数”. 它即不是无穷大, 也不是无穷小.
存在NaN,返回True

pd.isnull(df1)
>>>A      B      C      D      E
2016-03-01  False  False  False  False   True
2016-03-02  False  False  False  False  False
2016-03-03  False  False  False  False  False
2016-03-04  False  False  False  False   True

二、统计

numpy.NaN 不参与计算

1.平均值、求和、累加和

df1.mean() #默认按列求平均值
df1.mean(axis=1) #按行求平均值
df.sum() #按列求和
df.sum(axis='columns') #按行求和
df.cumsum() #计算轴向元素累加和,返回由中间结果组成的数组

2.shift函数

该函数主要的功能就是使数据框中的数据移动,若freq=None时,根据axis的设置,行索引数据保持不变,列索引数据可以在行上上下移动或在列上左右移动;若行索引为时间序列,则可以设置freq参数,根据periods和freq参数值组合,使行索引每次发生periods*freq偏移量滚动,列索引数据不会移动

# shift(0)
s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(0)
s
>>>
2020-04-29    1.0
2020-04-30    3.0
2020-05-01    5.0
2020-05-02    NaN
2020-05-03    6.0
2020-05-04    8.0
Freq: D, dtype: float64#shift(1)
s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(1)
s
>>>
2020-04-29    NaN
2020-04-30    1.0
2020-05-01    3.0
2020-05-02    5.0
2020-05-03    NaN
2020-05-04    6.0
Freq: D, dtype: float64

3.sub函数

>>> dfA         B         C         D
2016-03-01 -0.768789  1.347539  0.715367  0.581275
2016-03-02  0.163001 -0.509262 -0.615675 -0.220110
2016-03-03  0.815005 -0.343642  2.097537  1.706366
2016-03-04  0.755148  0.022449 -0.033679 -0.411535
2016-03-05  1.361040 -0.813593 -1.230564 -0.957386
2016-03-06  0.277162 -0.650544 -0.152688  1.070919
>>> s
2016-03-01    NaN
2016-03-02    1.0
2016-03-03    3.0
2016-03-04    5.0
2016-03-05    NaN
2016-03-06    6.0
Freq: D, dtype: float64
  • sub减法,二维数组df按行减去一维数组s的值
>>> df.sub(s,axis='index')A         B         C         D
2016-03-01       NaN       NaN       NaN       NaN
2016-03-02 -0.836999 -1.509262 -1.615675 -1.220110
2016-03-03 -2.184995 -3.343642 -0.902463 -1.293634
2016-03-04 -4.244852 -4.977551 -5.033679 -5.411535
2016-03-05       NaN       NaN       NaN       NaN
2016-03-06 -5.722838 -6.650544 -6.152688 -4.929081

4.apply 应用函数

  • 使用apply函数,调用cumsum函数
df.apply(np.cumsum)
>>>A         B         C         D
2016-03-01 -0.768789  1.347539  0.715367  0.581275
2016-03-02 -0.605788  0.838277  0.099692  0.361166
2016-03-03  0.209217  0.494635  2.197229  2.067531
2016-03-04  0.964365  0.517084  2.163549  1.655996
2016-03-05  2.325405 -0.296509  0.932986  0.698610
2016-03-06  2.602567 -0.947053  0.780298  1.769529
  • 使用apply函数,自定义一个函数,返回每列最大值与最小值的差值
df.apply(lambda x: x.max() - x.min())
>>>
>>> df.apply(lambda x: x.max() - x.min())
A    2.129829
B    2.161131
C    3.328100
D    2.663752
dtype: float64
  • 返回每行最大值与最小值的差值
df.apply(lambda x: x.max() - x.min() ,axis=1)

5.计数和众数

s = pd.Series(np.random.randint(0, 7, size=10))
s
>>>
0    4
1    6
2    6
3    0
4    5
5    4
6    6
7    4
8    1
9    1

计数,每个数字出现的次数

>>> s.value_counts()
6    3
4    3
1    2
5    1
0    1
dtype: int64

众数,4和6出现的次数最多

>>> s.mode()
0    4
1    6

三、数据合并

1.concat函数

>>> df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD'))
>>> dfA         B         C         D
0 -0.650238  1.293171  1.091541  0.178952
1 -0.164027 -0.053264  0.490023 -0.992589
2  0.782788  0.254571 -1.867243  0.529259
3 -0.429579  0.562526 -0.436258  2.364229
4  2.234823 -1.420623 -0.809523  0.165442
5 -0.277173 -0.151315 -0.132357 -0.992252
6  0.261993  0.018131  1.355897  0.151521
7 -0.696561 -2.785051 -0.771156  0.278054
8  0.995268  0.083372 -0.498132  0.946659
9  0.675779 -0.853811 -0.674370 -1.470860>>> df.iloc[:3]A         B         C         D
0 -0.650238  1.293171  1.091541  0.178952
1 -0.164027 -0.053264  0.490023 -0.992589
2  0.782788  0.254571 -1.867243  0.529259>>> df.iloc[3:7]A         B         C         D
3 -0.429579  0.562526 -0.436258  2.364229
4  2.234823 -1.420623 -0.809523  0.165442
5 -0.277173 -0.151315 -0.132357 -0.992252
6  0.261993  0.018131  1.355897  0.151521>>> df.iloc[7:]A         B         C         D
7 -0.696561 -2.785051 -0.771156  0.278054
8  0.995268  0.083372 -0.498132  0.946659
9  0.675779 -0.853811 -0.674370 -1.470860
  • concat函数
df1 = pd.concat([df.iloc[:3], df.iloc[3:7], df.iloc[7:]])
df1
>>> df1 = pd.concat([df.iloc[:3], df.iloc[3:7], df.iloc[7:]])
>>> df1A         B         C         D
0 -0.650238  1.293171  1.091541  0.178952
1 -0.164027 -0.053264  0.490023 -0.992589
2  0.782788  0.254571 -1.867243  0.529259
3 -0.429579  0.562526 -0.436258  2.364229
4  2.234823 -1.420623 -0.809523  0.165442
5 -0.277173 -0.151315 -0.132357 -0.992252
6  0.261993  0.018131  1.355897  0.151521
7 -0.696561 -2.785051 -0.771156  0.278054
8  0.995268  0.083372 -0.498132  0.946659
9  0.675779 -0.853811 -0.674370 -1.470860

2.SQL 样式的联合查询(merge函数)

>>> left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
>>> right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
>>> leftkey  lval
0  foo     1
1  foo     2
>>> rightkey  rval
0  foo     4
1  foo     5

merge合并

# SELECT * FROM left INNER JOIN right ON left.key = right.key;
pd.merge(left, right, on='key')
>>>key  lval  rval
0  foo     1     4
1  foo     1     5
2  foo     2     4
3  foo     2     5

3.append函数

append是seriesdataframe的方法,使用它就是默认沿着(axis = 0)列进行拼接

>>> s = pd.Series(np.random.randint(1, 5, size=4), index=list('ABCD'))
>>> df.append(s, ignore_index=True)A         B         C         D
0  -0.650238  1.293171  1.091541  0.178952
1  -0.164027 -0.053264  0.490023 -0.992589
2   0.782788  0.254571 -1.867243  0.529259
3  -0.429579  0.562526 -0.436258  2.364229
4   2.234823 -1.420623 -0.809523  0.165442
5  -0.277173 -0.151315 -0.132357 -0.992252
6   0.261993  0.018131  1.355897  0.151521
7  -0.696561 -2.785051 -0.771156  0.278054
8   0.995268  0.083372 -0.498132  0.946659
9   0.675779 -0.853811 -0.674370 -1.470860
10  2.000000  2.000000  4.000000  2.000000

四、分组统计

  • 数据分组
  • 每个组应用一个函数,输出一个结果
  • 合并每个组的结果构成最终输出
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'],'B' : ['one', 'one', 'two', 'three','two', 'two', 'one', 'three'],'C' : np.random.randn(8),'D' : np.random.randn(8)})
df
>>>A      B         C         D
0  foo    one -0.907531  0.245216
1  bar    one  0.575741  0.917884
2  foo    two -0.725860  1.146291
3  bar  three -0.421367 -0.885779
4  foo    two -0.363707 -1.905409
5  bar    two -1.307323  1.316524
6  foo    one  0.436804  1.164812
7  foo  three -1.146570  2.534074
  • ‘A’为分组对象,对其他项按分组求和
>>> df.groupby('A').sum()C         D
A
bar -1.152949  1.348629
foo -2.706864  3.184985
  • ‘A、B’为分组对象,对其他项按分组求和
# df.groupby(['B', 'A']).sum()
df.groupby(['A', 'B']).sum()
>>>C         D
A   B
bar one    0.575741  0.917884three -0.421367 -0.885779two   -1.307323  1.316524
foo one   -0.470727  1.410028three -1.146570  2.534074two   -1.089567 -0.759117

数据科学包——pandas基础(处理丢失数据、统计、合并、分组)相关推荐

  1. python第二阶段(2)入门-数据科学包 pandas

    数据科学包 pandas 导入pandas 创建对象 1 系列 2 日期序列(1) 3 日期序列(2) 4 Series的操作(1) 5 Series的操作(2) 合并,新增,连接和比较 1 连接 2 ...

  2. 3.机器学习—数据科学包3.2pandas基础

    pandas基础 一.pandas介绍 1.什么是pandas 2.pandas用途 3.课程内容 二.Ipython开发环境搭建 1.安装 2.新建运行环境 3.Ipython技巧 4.Ipytho ...

  3. 机器学习---数据科学包-第2天

    1 pandas快速入门(一) .Series()方法.Series类型由一组数据及与之相关的数据索引组成. import pandas as pd import numpy as np s = pd ...

  4. python数据科学包第二天

    文章目录 pandas入门 矩阵运算 重建索引 统计 数据合并 分组统计 数据整形 数据透视表 时间序列 类别数据 画图 数据读写 电影数据分析 准备工作 数据说明 利用 Pandas 分析电影评分数 ...

  5. 数据科学包——Day2

    数据科学包--Day2 利用Pandas, Numpy进行电影数据分析 准备工作 任务: 数据读取 数据合并 按性别查看各个电影的平均评分 男女评分差异最大的电影 活跃电影排行 前十大活跃电影--被评 ...

  6. python 数据科学 包_什么时候应该使用哪个Python数据科学软件包?

    python 数据科学 包 Python is the most popular language for data science. Unfortunately, it can be tricky ...

  7. python数据科学实践 常象宇_python数据科学

    Python语言拥有大量可用于存储.操作和洞察数据的程序库,已然成为深受数据科学研究人员推崇的工具.本书以IPython.NumPy.Pandas.Matplotlib和Scikit-Learn这5个 ...

  8. python数据科学实践 常象宇_Python数据科学实践

    章基于Python的数据科学环境搭建 1.1Python是数据科学"大势所趋" 1.2Anaconda入门--工欲善其事,必先利其器 1.3JupyterNotebook入门 1. ...

  9. Wireshark数据抓包教程之Wireshark捕获数据

    Wireshark数据抓包教程之Wireshark捕获数据 Wireshark抓包方法 在使用Wireshark捕获以太网数据,可以捕获分析到自己的数据包,也可以去捕获同一局域网内,在知道对方IP地址 ...

最新文章

  1. neo4j查询多跳关系的方法
  2. 读取一个文件中的字符,统计每个字符出现的次数
  3. guests mysql权限_MySQL降权运行之MySQL以Guests帐户启动设置方法
  4. C#中Socket通信用法实例详解
  5. 北理计算机网络实验汇编,北理计算机与网络实验(II)(汇编语言实验4).docx
  6. FusionSphere整体介绍
  7. 消息中间件 rabbitMQ
  8. win10计算机更新后网络卡,win10电脑更新完卡死 win10电脑更新完卡死解决办法
  9. docker专题(2):docker常用管理命令(下)
  10. HDU3789 奥运排序问题【序列处理】
  11. 图形大小_光伏电池正面图形设计优化
  12. 主流数据库以及适用场景思维导图
  13. ​公司靠的住么 - 携程做四休三
  14. [转]字号、pt、px、inch、cm 之间的关系及对照表
  15. levene ttest
  16. 注册表编辑已被管理员禁用—解决办法
  17. iPhone启动页尺寸
  18. 回首2013,寄语步入社会的我——自强不息,厚德载物
  19. css3动画 魔方 无限滚动
  20. 国税局发票查验API接口文档说明

热门文章

  1. 几种REST客户端简介(附下载路径)
  2. 缘份居在线起名,姓名打分API接口
  3. win10任务计划显示准备就绪但不自动运行
  4. 关于APP在小米5s第一次安装启动后,点击home返回桌面,再次进入重进闪屏页问题
  5. rsyslog 日志收集
  6. 夜神模拟器 设置代理
  7. JAVA使用stream对数据分组后求每组的最大值
  8. 上海公园地图接口分享
  9. 桌面市场现状及未来发展趋势报告
  10. 泊车路径规划——Reeds Shepp、应用