当前位置:   article > 正文

数据分析Pandas专栏---第十三章<Pandas训练题(初)>

数据分析Pandas专栏---第十三章<Pandas训练题(初)>

前言:

        写这篇是为了弄一个富有挑战性的Pandas练习题库,涵盖了许多常见和实用的数据处理问题。通过解决这些练习,能够深入了解Pandas提供的关键功能,掌握有效处理数据的技巧和方法。

        练习题库涵盖了选择特定列并创建新DataFrame、对DataFrame进行随机抽样、将字符串列转换为日期时间类型等常见任务。讨论如何根据给定条件进行行的筛选、对字符串列进行大小写转换以及重命名DataFrame的列。此外,还会探索处理缺失数据、重复数据和进行分组计算的方法,以及如何进行数据透视、排序和滑动窗口计算

        实践这些练习,培养自己解决实际数据处理问题的能力,并在日常工作中更加熟练地使用Pandas库。

正文:

---------------------------------------------------难度从低到高------------------------------------------------

题1:

根据给定的DataFrame,选择特定的列,并将其转换为一个新的DataFrame。

案例:

        假设我们有一个DataFrame,其中包含了用户的姓名、年龄、性别以及邮箱地址等信息。我们需要选择其中的姓名和邮箱地址这两列,并将其转换为一个新的DataFrame。

解题思路:

要解决这个问题,我们可以使用Pandas中的索引操作来选择特定的列。首先,我们需要创建一个新的DataFrame对象,并从原始DataFrame中选择所需的列进行复制。

解决方案代码如下:

  1. import pandas as pd
  2. # 创建原始DataFrame
  3. data = {'姓名': ['张三', '李四', '王五', '赵六'],
  4. '年龄': [25, 30, 35, 40],
  5. '性别': ['男', '女', '男', '女'],
  6. '邮箱地址': ['zhangsan@gmail.com', 'lisi@gmail.com', 'wangwu@gmail.com', 'zhaoliu@gmail.com']}
  7. df = pd.DataFrame(data)
  8. # 选择特定列并创建新的DataFrame
  9. new_df = pd.DataFrame()
  10. new_df['姓名'] = df['姓名']
  11. new_df['邮箱地址'] = df['邮箱地址']
  12. # 打印新的DataFrame
  13. print(new_df)

输出结果:

  1. 姓名 邮箱地址
  2. 0 张三 zhangsan@gmail.com
  3. 1 李四 lisi@gmail.com
  4. 2 王五 wangwu@gmail.com
  5. 3 赵六 zhaoliu@gmail.com

在这个案例中,我们创建了一个原始的DataFrame,并使用选择特定列的方法将姓名和邮箱地址这两列提取出来,赋值给新的DataFrame对象new_df。最后,我们打印出新的DataFrame,以确认我们成功地选择了所需的列并创建了新的DataFrame。

掌握知识点:

        理解如何根据给定的DataFrame选择特定的列,并将其转换为一个新的DataFrame。这是Pandas中一个常用的基础操作,为处理和分析数据提供了基础。深入思考如何将这个方法应用到实际的数据处理任务中,如特征选择、数据提取等,以更好地利用Pandas的强大功能。

题2:

如何对DataFrame的行进行随机抽样?

案例:

        假设我们有一个包含学生姓名和测试成绩的DataFrame,我们需要对这个DataFrame的行进行随机抽样,选择其中一部分学生进行分析。

解题思路:

要解决这个问题,我们可以使用Pandas中的sample()函数来对DataFrame的行进行随机抽样。我们可以指定抽样的比例或具体的抽样数量,并设置随机种子以保证结果的可重复性。

解决方案代码如下:

  1. import pandas as pd
  2. # 创建原始DataFrame
  3. data = {'学生姓名': ['张三', '李四', '王五', '赵六', '小明', '小红'],
  4. '测试成绩': [85, 78, 90, 92, 88, 91]}
  5. df = pd.DataFrame(data)
  6. # 对DataFrame行进行随机抽样
  7. sample_df = df.sample(frac=0.5, random_state=42) # 抽取50%的行,设置随机种子为42
  8. # 打印抽样结果
  9. print(sample_df)

输出结果:

  1. 学生姓名 测试成绩
  2. 1 李四 78
  3. 4 小明 88
  4. 3 赵六 92

在这个案例中,我们创建了一个原始的DataFrame,并使用sample()函数对DataFrame的行进行随机抽样。通过设置frac参数为0.5,我们抽取了原始DataFrame中50%的行作为抽样结果,并设置了随机种子为42,以保证结果的可重复性。

掌握知识点:

了解如何对DataFrame的行进行随机抽样。这是一个常见的数据处理任务,可以帮助我们在大规模数据集上进行快速的初步分析和检验。可以尝试修改案例中的参数,如抽样比例或抽样数量,进一步了解抽样对结果的影响,并将这个方法应用到实际的数据分析中。

题3:

如何将DataFrame中的字符串列转换为日期时间类型?

案例:

假设我们有一个包含日期和销售额的DataFrame,日期列是以字符串格式表示的。我们需要将这个日期列转换为日期时间类型,以便更方便地进行日期操作和分析。

解题思路:

要解决这个问题,我们可以使用Pandas的to_datetime()函数将字符串列转换为日期时间类型。我们可以指定日期列的格式,并将转换后的结果赋值给原始的日期列。

解决方案代码如下:

  1. import pandas as pd
  2. # 创建原始DataFrame
  3. data = {'日期': ['2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01'],
  4. '销售额': [1000, 1500, 2000, 1800]}
  5. df = pd.DataFrame(data)
  6. # 将字符串列转换为日期时间类型
  7. df['日期'] = pd.to_datetime(df['日期'])
  8. # 打印转换后的DataFrame
  9. print(df)

输出结果:

  1. 日期 销售额
  2. 0 2022-01-01 1000
  3. 1 2022-02-01 1500
  4. 2 2022-03-01 2000
  5. 3 2022-04-01 1800

在这个案例中,我们创建了一个包含日期和销售额的DataFrame,并使用to_datetime()函数将日期列从字符串格式转换为日期时间类型。我们直接在原始DataFrame上进行操作,将转换后的结果赋值给原始日期列。

掌握知识点:

可以了解如何将DataFrame中的字符串列转换为日期时间类型。这对于处理和分析时间序列数据非常重要,可以进行更精准的日期运算和可视化分析。可以尝试修改案例中的日期格式,并观察结果的变化,以更深入理解日期时间类型的转换。

题4:

给定一个DataFrame和一个条件,如何筛选出满足条件的行?

案例:

假设我们有一个包含学生姓名、年龄和成绩的DataFrame,我们需要根据条件筛选出年龄大于等于18岁的学生。

解题思路:

要解决这个问题,我们可以使用布尔索引(Boolean indexing)来筛选出满足条件的行。首先,我们需要定义条件,然后使用该条件对DataFrame进行布尔索引操作,得到满足条件的行。

解决方案代码如下:

  1. import pandas as pd
  2. # 创建原始DataFrame
  3. data = {'姓名': ['张三', '李四', '王五', '赵六'],
  4. '年龄': [20, 17, 19, 22],
  5. '成绩': [85, 78, 90, 92]}
  6. df = pd.DataFrame(data)
  7. # 定义条件并筛选出满足条件的行
  8. condition = df['年龄'] >= 18
  9. filtered_df = df[condition]
  10. # 打印筛选结果
  11. print(filtered_df)

输出结果:

  1. 姓名 年龄 成绩
  2. 0 张三 20 85
  3. 2 王五 19 90
  4. 3 赵六 22 92

在这个案例中,我们创建了一个包含学生姓名、年龄和成绩的DataFrame,并定义了筛选的条件,即年龄大于等于18岁。通过使用布尔索引df[condition],我们对DataFrame进行筛选操作,将满足条件的行提取出来并赋值给新的DataFrame对象filtered_df

掌握知识点:

可以了解如何根据给定的条件筛选DataFrame中的行。这是一个常见的数据处理任务,对于数据的筛选和过滤非常有用。可以尝试修改案例中的筛选条件,并观察结果的变化,以更进一步理解布尔索引的使用。

题5:


如何对DataFrame中的字符串列进行大小写转换?

案例:

假设我们有一个包含学生姓名和性别的DataFrame,我们需要将学生姓名的字符串列转换为大写或小写形式,以统一姓名的格式。

解题思路:

要解决这个问题,我们可以使用Pandas的字符串方法对字符串列进行大小写转换。Pandas提供了str.upper()方法将字符串转换为大写形式,以及str.lower()方法将字符串转换为小写形式。我们可以对字符串列应用这些方法,并将转换后的结果赋值给原始的字符串列。

解决方案代码如下:

  1. import pandas as pd
  2. # 创建原始DataFrame
  3. data = {'姓名': ['张三', '李四', '王五', '赵六'],
  4. '性别': ['male', 'Female', 'female', 'MALE']}
  5. df = pd.DataFrame(data)
  6. # 将字符串列转换为大写形式
  7. df['姓名'] = df['姓名'].str.upper()
  8. # 将字符串列转换为小写形式
  9. df['性别'] = df['性别'].str.lower()
  10. # 打印转换后的DataFrame
  11. print(df)

输出结果:

  1. 姓名 性别
  2. 0 张三 male
  3. 1 李四 female
  4. 2 王五 female
  5. 3 赵六 male

在这个案例中,我们创建了一个包含学生姓名和性别的DataFrame,并使用str.upper()方法将姓名列转换为大写形式,使用str.lower()方法将性别列转换为小写形式。

掌握知识点:

可以了解如何对DataFrame中的字符串列进行大小写转换。这对于数据的清洗和统一非常有用,可以消除大小写带来的差异,并提高数据的一致性。可以尝试应用相反的转换方法,如str.lower()str.upper(),并观察结果的变化,以进一步了解字符串转换的效果。

题6:


如何对DataFrame中的列进行重命名?

案例:

假设我们有一个包含学生姓名和年龄的DataFrame,我们需要对这两列进行重命名,将列名从英文改为中文。

解题思路:

要解决这个问题,我们可以使用Pandas的rename()函数对DataFrame的列进行重命名。我们可以通过指定columns参数,传入一个字典,其中键是原始列名,值是新的列名,来对列进行重命名操作。

解决方案代码如下:

  1. import pandas as pd
  2. # 创建原始DataFrame
  3. data = {'Name': ['张三', '李四', '王五', '赵六'],
  4. 'Age': [20, 21, 19, 22]}
  5. df = pd.DataFrame(data)
  6. # 对列进行重命名
  7. df = df.rename(columns={'Name': '姓名', 'Age': '年龄'})
  8. # 打印重命名后的DataFrame
  9. print(df)

输出结果:

  1. 姓名 年龄
  2. 0 张三 20
  3. 1 李四 21
  4. 2 王五 19
  5. 3 赵六 22

在这个案例中,我们创建了一个包含学生姓名和年龄的DataFrame,并使用rename()函数对两列进行重命名。我们通过传入一个字典{'Name': '姓名', 'Age': '年龄'}来指定原始列名和新的列名。

掌握知识点:

可以了解如何对DataFrame中的列进行重命名。这对于数据的清洗和整理非常有用,可以使列名更加有意义和可读性。可以尝试修改案例中的重命名字典,并观察结果的变化,以进一步理解对列进行重命名的操作。

题7:


给定一个DataFrame和一个字符串,如何判断该字符串是否在DataFrame的某一列中存在?

案例:

假设我们有一个包含学生姓名和年龄的DataFrame,我们需要判断某个给定的学生姓名是否存在于DataFrame的姓名列中。

解题思路:

要解决这个问题,我们可以使用Pandas的isin()函数来判断字符串是否存在于某一列中。我们可以将给定的学生姓名转换为一个列表,然后使用isin()函数将这个列表与姓名列进行比较,返回一个布尔序列,表示每个值是否存在于姓名列中。

解决方案代码如下:

  1. import pandas as pd
  2. # 创建原始DataFrame
  3. data = {'姓名': ['张三', '李四', '王五', '赵六'],
  4. '年龄': [20, 21, 19, 22]}
  5. df = pd.DataFrame(data)
  6. # 给定的学生姓名
  7. given_name = '李四'
  8. # 判断学生姓名是否存在于姓名列中
  9. name_exists = given_name in df['姓名'].values
  10. # 打印判断结果
  11. print(f'学生姓名"{given_name}"存在于姓名列中: {name_exists}')

输出结果:

学生姓名"李四"存在于姓名列中: True

在这个案例中,我们创建了一个包含学生姓名和年龄的DataFrame,并给定了一个学生姓名为'李四'。我们使用in关键字和df['姓名'].values将学生姓名与姓名列进行比较,得到一个布尔值,表示学生姓名是否存在于姓名列中。

掌握知识点:

可以了解如何判断给定的字符串是否存在于DataFrame的某一列中。这在数据查找和匹配方面非常有用,可以帮助我们快速地找到数据中是否存在某个特定的值。可以尝试修改给定的学生姓名,然后观察结果的变化,以进一步了解判断字符串存在性的操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/204705?site
推荐阅读
相关标签
  

闽ICP备14008679号