• python数据分析02—Pandas


    目录

    1. Pandas的基本概念

    1.1 Series方法: 

    1.2 DataFrame类似于二维数组,有行列之分

    2.选择:从Series和DataFrame实例中选择部分数据

    2.1 Series:索引或索引位置

     2.2 Series属性:iloc,loc(按“行”来索引)

     3. DataFrame的索引方式

    3.1 按 行 或 列 进行索引 

    3.2 读取多行多列:loc方法

    3.3 二维选择

    4. 缺失值与数据自动对齐

    4.1 Series方法

    4.2 DataFrame方法

    4.3 填充NaN方法:

    6.数据合并与分组

    6.1 合并两个DataFrame两种方法:

    6.1.1 简单拼接----concat

    6.1.2 根据列名查询逐一合并---merge

     6.2 Pandas也支持类似于数据库查询语句GROUP BY,可完成分组按照某列

    7. 时间序列处理

      7.1 时间差的运算

     7.2 pandas与datetime

    7.3 pandas可生成日期范围通过方法.date_range函数


    1. Pandas的基本概念

    Pandas:
        数据分析,在Numpy基础上增加了高级功能:数据自动对齐,时间序列支持、缺失数据灵活处理等等
        Series、DataFrame核心数据结构,大部分Pandas功能都围绕这两种数据结构进行
        Series是一个值得序列,可以理解成一维数组,有一个列和一个索引,索引可以定制

    1.1 Series方法: 

    1. import pandas as pd
    2. s1 = pd.Series([1,2,3,4,5])
    3. print(s1)
    4. """
    5. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    6. 0 1
    7. 1 2
    8. 2 3
    9. 3 4
    10. 4 5
    11. dtype: int64
    12. Process finished with exit code 0
    13. """
    1. import pandas as pd
    2. s2 = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
    3. print(s2)
    4. """
    5. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    6. a 1
    7. b 2
    8. c 3
    9. d 4
    10. e 5
    11. dtype: int64
    12. """

    1.2 DataFrame类似于二维数组,有行列之分

    1. import pandas as pd
    2. import numpy as np
    3. df = pd.DataFrame(np.random.randn(4,4),index=['a','b','c','d'],columns=['A','B','C','D'])
    4. print(df)
    5. """
    6. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    7. A B C D
    8. a 0.341299 -1.501784 1.069910 0.879989
    9. b 0.416756 1.066293 0.569988 2.745966
    10. c 0.711972 -0.336308 -0.006444 1.322002
    11. d 2.217314 -0.281477 -0.706486 0.117150
    12. Process finished with exit code 0
    13. """
    通过指定索引-index和标签-columns创建DataFrame对象,可以通过df.index和df.columns访问索引和标签:
    
    1. df.index
    2. Out[12]: Index(['a', 'b', 'c', 'd'], dtype='object')
    3. df.columns
    4. Out[13]: Index(['A', 'B', 'C', 'D'], dtype='object')

    2.选择:从Series和DataFrame实例中选择部分数据

    2.1 Series:索引或索引位置

    1. import pandas as pd
    2. import numpy as np
    3. s2 = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
    4. print(s2[0])
    5. print('_______')
    6. print(s2[0:3])
    7. print(s2['a'])
    8. print("________")
    9. print(s2['a':'c'])
    10. """
    11. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    12. 1
    13. _______
    14. a 1
    15. b 2
    16. c 3
    17. dtype: int64
    18. 1
    19. ________
    20. a 1
    21. b 2
    22. c 3
    23. dtype: int64
    24. Process finished with exit code 0
    25. """

     2.2 Series属性:iloc,loc(按“行”来索引)

    1. import pandas as pd
    2. import numpy as np
    3. s2 = pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
    4. print(s2.iloc[0:3]) #按照默认索引访问
    5. print("--------------")
    6. print(s2.loc['a':'c']) #按照自定义的index访问
    7. """
    8. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    9. a 1
    10. b 2
    11. c 3
    12. dtype: int64
    13. --------------
    14. a 1
    15. b 2
    16. c 3
    17. dtype: int64
    18. Process finished with exit code 0
    19. """

     3. DataFrame的索引方式

    标签取值-列
        df.A
        df['A']
    索引位置-行
        df.loc['a'] #该方法用的是自定义的index值来索引
        df.iloc[0]  #该方法用的是默认的index来索引
    
    索引位置多行-多列:
        df.loc[:,['B','C','D']]
    
    二维选择:
        点:df.loc['a','A']
        块:df.loc['a':'b','A':'C']
    

    3.1 按 行 或 列 进行索引 

    1. import pandas as pd
    2. import numpy as np
    3. df = pd.DataFrame(np.random.randn(4,4),index=['a','b','c','d'],columns=['A','B','C','D'])
    4. #按“列”来取数据
    5. print(df.A) # 标签取值-列
    6. print("-----")
    7. print(df['A']) # 标签取值-列
    8. """
    9. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    10. a -0.931263
    11. b -0.648751
    12. c 0.438436
    13. d -1.481929
    14. Name: A, dtype: float64
    15. -----
    16. a -0.931263
    17. b -0.648751
    18. c 0.438436
    19. d -1.481929
    20. Name: A, dtype: float64
    21. """

    3.2 读取多行多列:loc方法

    1. import pandas as pd
    2. import numpy as np
    3. df = pd.DataFrame(np.random.randn(4,4),index=['a','b','c','d'],columns=['A','B','C','D'])
    4. print(df)
    5. print("-----")
    6. print(df.loc[:,['B','C','D']]) # 标签取值-多行多列 (以默认的方式)
    7. """
    8. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    9. A B C D
    10. a -1.205197 -0.375471 0.115681 0.111243
    11. b -0.329662 0.001292 -0.540496 -1.274938
    12. c -0.285998 0.122846 -0.738836 0.213211
    13. d -1.479184 0.251340 0.322654 -0.745249
    14. -----
    15. B C D
    16. a -0.375471 0.115681 0.111243
    17. b 0.001292 -0.540496 -1.274938
    18. c 0.122846 -0.738836 0.213211
    19. d 0.251340 0.322654 -0.745249
    20. """

    3.3 二维选择

    1. import pandas as pd
    2. import numpy as np
    3. df = pd.DataFrame(np.random.randn(4,4),index=['a','b','c','d'],columns=['A','B','C','D'])
    4. print(df)
    5. print("-----")
    6. print(df.loc['a','A']) # 点
    7. print("----")
    8. print(df.loc['a':'b','A':'C'])
    9. """
    10. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    11. A B C D
    12. a -0.234136 -0.458588 0.672268 -0.749685
    13. b 0.462632 0.681731 1.438152 -0.073641
    14. c -0.649510 0.443019 0.361910 0.589839
    15. d -2.194516 -1.881632 -0.470177 2.606073
    16. -----
    17. -0.23413573419505523
    18. ----
    19. A B C
    20. a -0.234136 -0.458588 0.672268
    21. b 0.462632 0.681731 1.438152
    22. """

    4. 缺失值与数据自动对齐

    该功能可以对不同索引对象进行算术运算,运算过程中缺失值在运算中传播会以NaN值进行自动填写。

    4.1 Series方法

    1. import pandas as pd
    2. import numpy as np
    3. s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])
    4. s2 = pd.Series([2,3,4,5], index=['b','c','d','e'])
    5. print(s1+s2)
    6. '''
    7. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    8. a NaN
    9. b 4.0
    10. c 6.0
    11. d 8.0
    12. e NaN
    13. dtype: float64
    14. '''

    4.2 DataFrame方法

    1. import pandas as pd
    2. import numpy as np
    3. df1 = pd.DataFrame(np.arange(9).reshape(3,3),columns=list('ABC'),index=list('abc'))
    4. df2 = pd.DataFrame(np.arange(12).reshape(3,4),columns=list('ABCE'),index=list('bcd'))
    5. print(df1+df2)
    6. '''
    7. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    8. A B C E
    9. a NaN NaN NaN NaN
    10. b 3.0 5.0 7.0 NaN
    11. c 10.0 12.0 14.0 NaN
    12. d NaN NaN NaN NaN
    13. '''

    4.3 填充NaN方法:

    df1.add(df2, fill_value=0)
    1. import pandas as pd
    2. import numpy as np
    3. df1 = pd.DataFrame(np.arange(9).reshape(3,3),columns=list('ABC'),index=list('abc'))
    4. df2 = pd.DataFrame(np.arange(12).reshape(3,4),columns=list('ABCE'),index=list('bcd'))
    5. print(df1+df2)
    6. print('------')
    7. print(df1.add(df2, fill_value=0))
    8. '''
    9. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    10. A B C E
    11. a NaN NaN NaN NaN
    12. b 3.0 5.0 7.0 NaN
    13. c 10.0 12.0 14.0 NaN
    14. d NaN NaN NaN NaN
    15. ------
    16. A B C E
    17. a 0.0 1.0 2.0 NaN
    18. b 3.0 5.0 7.0 3.0
    19. c 10.0 12.0 14.0 7.0
    20. d 8.0 9.0 10.0 11.0
    21. '''

     5. 运算统计

    统计:
        类似Numpy,Series与DataFrame也可以使用各种统计方法:平均值、方差、求和等等,可通过descirbe方法可以获取常见统计信息
                     A    B    C
            count  3.0  3.0  3.0            元素值得数量
            mean   3.0  4.0  5.0            平均数
            std    3.0  3.0  3.0            标准差
            min    0.0  1.0  2.0            最小值
            25%    1.5  2.5  3.5            取值百分比
            50%    3.0  4.0  5.0            取值百分比
            75%    4.5  5.5  6.5            取值百分比
            max    6.0  7.0  8.0            最大值

    6.数据合并与分组

    6.1 合并两个DataFrame两种方法:

    6.1.1 简单拼接----concat

    1. import pandas as pd
    2. import numpy as np
    3. df1 = pd.DataFrame(np.random.randn(3,3))
    4. df2 = pd.DataFrame(np.random.randn(3,3),index=[5,6,7])
    5. print(pd.concat([df1,df2]))
    6. """
    7. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    8. 0 1 2
    9. 0 1.236067 0.751290 0.358762
    10. 1 -1.605407 -1.296070 -0.167892
    11. 2 1.403888 1.962560 0.766084
    12. 5 -1.118603 0.845264 -0.890752
    13. 6 -1.209584 0.006337 0.310854
    14. 7 2.104464 -0.157647 -1.805883
    15. Process finished with exit code 0
    16. """

    6.1.2 根据列名查询逐一合并---merge

    1. df1 = pd.DataFrame({'user_id':[5248,13],'course':[12,45],'minutes':[9,36]})
    2. df2 = pd.DataFrame({'course':[12,5], 'name':['Numpy','Pandas']})
    3. print(pd.merge([df1,df2]))

     6.2 Pandas也支持类似于数据库查询语句GROUP BY,可完成分组按照某列

    1. import pandas as pd
    2. df1 = pd.DataFrame({'user_id':[5248,13,5348],'course':[12,45,23],'minutes':[9,36,45]})
    3. a = df1[['user_id','minutes']].groupby('user_id').sum() #通过'user_id'和'minutes'来进行分组,并按'user_id'排列
    4. print(a)
    5. """
    6. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    7. minutes
    8. user_id
    9. 13 36
    10. 5248 9
    11. 5348 45
    12. Process finished with exit code 0
    13. """

    7. 时间序列处理

    datetime属性对象:
        .datetime   代表时间对象
        .date       代表某一天
        .timedelta  代表时间差

      7.1 时间差的运算

    1. from datetime import datetime, timedelta
    2. d1 = datetime(2020,3,15)
    3. delta = timedelta(days=10) #时间为10天
    4. print(d1+delta)
    5. """
    6. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    7. 2020-03-25 00:00:00
    8. """

     7.2 pandas与datetime

    1. import pandas as pd
    2. import numpy as np
    3. from datetime import datetime, timedelta
    4. dates = [datetime(2020,3,15),datetime(2020,3,16),datetime(2020,3,17),datetime(2020,3,18)]
    5. ts = pd.Series(np.random.randn(4),index=dates) # 数组ts的索引index定义为dates的值
    6. print(ts)
    7. print('------')
    8. print(dates)
    9. print('------')
    10. print(ts.index[0])
    11. """
    12. D:\Anaconda3\python.exe D:/Python_file_forAnconda3_python/数据分析/自定义学习/Pandas01.py
    13. 2020-03-15 -0.185834
    14. 2020-03-16 -2.075404
    15. 2020-03-17 -1.093103
    16. 2020-03-18 0.171173
    17. dtype: float64
    18. ------
    19. [datetime.datetime(2020, 3, 15, 0, 0), datetime.datetime(2020, 3, 16, 0, 0), datetime.datetime(2020, 3, 17, 0, 0), datetime.datetime(2020, 3, 18, 0, 0)]
    20. ------
    21. 2020-03-15 00:00:00
    22. """
    pandas取索引对应的值:
        ts[ts.index[0]]  # ts.index[0]  表示的是索引值
        ts['2020/3/15']
        ts['3/15/2020']
        ts[datetime(2020,3,15)]

    7.3 pandas可生成日期范围通过方法.date_range函数

    pandas可生成日期范围通过方法.date_range函数
        该函数可传参:
        start:      指定日期范围起始时间
        end:       指定日期范围截止时间
        preiods:   指定日期范围间隔时间
        freq:      指定日期频率:D-每天,H-每小时,M-每月
                        5D - 5天
                        MS-  每个月第一天
                        BM-  每个月最后一个工作日
                        1h30min 1小时30分钟
                pd.date_range('2020-1-1','2021',freq='MS')

  • 相关阅读:
    Controller 层编码规范
    2022年0903我的SpringBoot框架入门的第一个程序
    MySQL join和索引
    Qt操作Sqlite类封装,及命令行导入csv文件到Sqlite数据库
    【无标题】
    svn部署维护文档
    常用Python中文分词工具的使用方法
    python语言字符串练习题
    CSP-J2021-插入排序
    .....
  • 原文地址:https://blog.csdn.net/m0_55196097/article/details/125455085