• 29 Python的pandas模块


    概述

            在上一节,我们介绍了Python的numpy模块,包括:多维数组、数组索引、数组操作、数学函数、线性代数、随机数生成等内容。在这一节,我们将介绍Python的pandas模块。pandas模块是Python编程语言中用于数据处理和分析的强大模块,它提供了许多用于数据操作和清洗的函数,使得数据处理和分析变得更为简单和直观。

            在Python中使用pandas模块,需要先安装pandas库。可以通过pip命令进行安装:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas。安装完成后,就可以在Python脚本中导入pandas模块,并使用其函数和方法了。

    Series

            Series是一个一维数组,它不仅包含数据,还包含索引。Series可以被看作是一个字典,其中的索引是键,值是数据。每个索引只有一个对应的值,因此Series可以被看作是具有标签化的数值数据。

    1. import pandas as pd
    2. # 创建一个Series
    3. s = pd.Series([1, 2, 3, 4, 5])
    4. # 输出:
    5. # 0 1
    6. # 1 2
    7. # 2 3
    8. # 3 4
    9. # 4 5
    10. # dtype: int64
    11. print(s)

            上面的示例代码创建了一个包含五个整数的Series,默认情况下,它的索引是从0开始的整数。

            当然,我们也可以提供一个列表作为Series的索引和值。

    1. import pandas as pd
    2. # 创建一个带有自定义索引和值的Series
    3. index = ['C', 'S', 'D', 'N', 'P']
    4. s = pd.Series([1, 2, 3, 4, 5], index = index)
    5. # 输出:
    6. # C 1
    7. # S 2
    8. # D 3
    9. # N 4
    10. # P 5
    11. # dtype: int64
    12. print(s)

            我们还可以直接使用字典创建带有自定义数据标签的数据,pandas会自动把字典的键作为数据标签,字典的值作为相对应的数据。

    1. import pandas as pd
    2. # 创建一个带有自定义索引和值的Series
    3. s = pd.Series({'C': 1, 'S': 2, 'D': 3, 'N': 4, 'P': 5})
    4. # 输出:
    5. # C 1
    6. # S 2
    7. # D 3
    8. # N 4
    9. # P 5
    10. # dtype: int64
    11. print(s)

            如果想访问Series里的数据,也非常简单,直接使用中括号加数据标签的方式即可。

    1. import pandas as pd
    2. s = pd.Series([1, 2, 3, 4, 5])
    3. # 访问第二个元素,输出:3
    4. print(s[2])
    5. s = pd.Series({'C': 1, 'S': 2, 'D': 3, 'N': 4, 'P': 5})
    6. # 访问Key值为'D'的元素,输出:3
    7. print(s['D'])

            使用Series,结合pandas强大的数据对齐功能,可以让我们快速对数据进行分析和处理。

    1. import pandas as pd
    2. s1 = pd.Series({'Red': 1, 'Blue': 2, 'Green': 3})
    3. s2 = pd.Series({'Red': 100, 'Blue': 200, 'Green': 300})
    4. s = s1 + s2
    5. # 将两个Series进行相加,输出:
    6. # Red 101
    7. # Blue 202
    8. # Green 303
    9. # dtype: int64
    10. print(s)
    11. s1 = pd.Series({'Red': 1, 'Blue': 2, 'Green': 3, 'White': 4})
    12. s2 = pd.Series({'Red': 100, 'Blue': 200, 'Green': 300})
    13. s = s1 + s2
    14. # 数据标签不相同的数据,运算后结果是NaN,输出:
    15. # Blue 202.0
    16. # Green 303.0
    17. # Red 101.0
    18. # White NaN
    19. # dtype: float64
    20. print(s)
    21. # 数据标签不相同的数据,调用add函数,可以设置默认填充值,输出:
    22. # Blue 202.0
    23. # Green 303.0
    24. # Red 101.0
    25. # White 4.0
    26. # dtype: float64
    27. s = s1.add(s2, fill_value = 0)
    28. print(s)

    DataFrame

            DataFrame是一个二维的表格型数据结构,类似于Excel或数据库中的表。DataFrame中的数据可以是不同的数据类型,比如:整数、浮点数、字符串、布尔值等。

    1. import pandas as pd
    2. # 创建DataFrame
    3. data = {'Name': ['Jack', 'Tank', 'John'], 'Age': [20, 21, 19]}
    4. df = pd.DataFrame(data)
    5. # 输出:
    6. # Name Age
    7. # 0 Jack 20
    8. # 1 Tank 21
    9. # 2 John 19
    10. print(df)

            使用DataFrame,我们可以很方便地对表中的行、列进行增删改查等操作。使用df['column_name']可以查看指定列的数据;使用df.iloc[row_number]可以查看指定行的数据;使用df.loc[row_label]可以基于标签访问指定行的数据;使用df[condition]可以筛选出满足条件的数据:使用df['new_column'] = values可以添加一个新列;使用del df['column_name']可以删除一列。

    1. import pandas as pd
    2. # 创建DataFrame
    3. data = {'Name': ['Jack', 'Tank', 'John'], 'Age': [20, 21, 19]}
    4. df = pd.DataFrame(data)
    5. # 输出:
    6. # Name Age
    7. # 0 Jack 20
    8. # 1 Tank 21
    9. # 2 John 19
    10. print(df)
    11. df = pd.DataFrame(data, index = ['First', 'Second', 'Third'])
    12. # 指定自定义索引,输出:
    13. # Name Age
    14. # First Jack 20
    15. # Second Tank 21
    16. # Third John 19
    17. print(df)
    18. # 访问列数据,输出:
    19. # First Jack
    20. # Second Tank
    21. # Third John
    22. # Name: Name, dtype: object
    23. print(df['Name'])
    24. # 根据行索引访问行数据,输出:
    25. # Name John
    26. # Age 19
    27. # Name: Third, dtype: object
    28. print(df.iloc[2])
    29. # 根据行标签访问行数据,输出:
    30. # Name John
    31. # Age 19
    32. # Name: Third, dtype: object
    33. print(df.loc['Third'])
    34. df['Age'] = [22, 18, 20]
    35. # 修改列数据,输出:
    36. # Name Age
    37. # First Jack 22
    38. # Second Tank 18
    39. # Third John 20
    40. print(df)
    41. df['Gender'] = ['M', 'F', 'F']
    42. # 新增列数据,输出:
    43. # Name Age Gender
    44. # First Jack 22 M
    45. # Second Tank 18 F
    46. # Third John 20 F
    47. print(df)
    48. del df['Gender']
    49. # 删除列数据,输出:
    50. # Name Age
    51. # First Jack 22
    52. # Second Tank 18
    53. # Third John 20
    54. print(df)
    55. # 筛选出年龄大于20的数据,输出:
    56. # Name Age
    57. # First Jack 22
    58. print(df[df['Age'] > 20])

    数据读取和写入

            使用pandas,可以方便地读取和写入各种数据格式,比如:CSV、Excel、SQL数据库等。我们以CSV文件的读写为例,来理解CSV表格数据的读取和写入。

    1. import pandas as pd
    2. # 创建DataFrame
    3. data = {'Name': ['Jack', 'Tank', 'John'], 'Age': [20, 21, 19]}
    4. df = pd.DataFrame(data)
    5. # 将DataFrame写入CSV文件
    6. df.to_csv('output.csv', index = False)

            在上面的示例代码中,我们首先创建了一个名为df的DataFrame,然后使用to_csv函数将其写入一个名为output.csv的CSV文件中。我们将index参数设置为False,以避免将DataFrame的索引写入CSV文件。

            to_csv函数还有其他一些可选参数,包括:

            sep:用于指定CSV文件中的分隔符,默认是逗号。

            header:用于指定是否将DataFrame的列名写入CSV文件中,默认为True。

            encoding:用于指定文件的编码格式,默认为UTF-8。

            compression:用于指定文件的压缩格式,默认为None。

            在下面的示例代码中,我们读取了上面保存的名为output.csv的CSV文件,并将其转化为一个pandas DataFrame。

    1. import pandas as pd
    2. # 从CSV文件读取
    3. df = pd.read_csv('output.csv')
    4. # 输出:
    5. # Name Age
    6. # 0 Jack 20
    7. # 1 Tank 21
    8. # 2 John 19
    9. print(df)

            read_csv函数还有其他一些可选参数,包括:

            sep:指定分隔符,默认为逗号。

            header:指定行号作为列名,默认为0。

            index_col:将一列或多列设为DataFrame的索引。

            usecols:返回的列的子集,可以是一个列表或函数。

            dtype:为每一列设置数据类型。

            skiprows:跳过指定的行数或行号。

            na_values:用于识别空值的字符串或字符串列表。

            keep_default_na:是否保留默认的识别空值的字符串。

  • 相关阅读:
    【MySql】7- 实践篇(五)
    初识jdbc
    算法学习(七)判断一个二叉树是否为完全二叉树
    【ONE·Linux || 多线程(二)】
    基于PLC控制四自由度气动式机械手设计
    解决谷歌Redux DevTools调试React+Typescript项目数据对不上/连接不上问题
    Windows 下安装 Bun:像 Node 或 Deno 一样的现代 JavaScript 运行时
    网络-存档
    面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)
    OpenStack 下 CentOS6.X 镜像网络初始化失败问题排查
  • 原文地址:https://blog.csdn.net/hope_wisdom/article/details/133846553