当前位置: 首页 > news >正文

pandas 的series和dataframe的用法,六个题目

  1. 创建与访问
    题目:创建一个包含 7 个元素的 Series(索引为周一至周日),值为某周每天的气温(自行设定),并完成:

    • 访问周三的气温
    • 筛选出气温高于 30℃ 的天数
      # 题目1:创建与访问
      print("=== 题目1:创建与访问 ===")
      # 创建Series(周一至周日的气温)
      temperatures = pd.Series([28, 30, 32, 29, 31, 27, 26],index=['周一', '周二', '周三', '周四', '周五', '周六', '周日']
      )
      print("气温数据:")
      print(temperatures)# 访问周三的气温
      print("\n周三的气温:", temperatures['周三'])# 筛选出气温高于30℃的天数
      print("气温高于30℃的天数:")
      print(temperatures[temperatures > 30])

  2. 数据筛选与修改
    题目:给定一个包含 "姓名"、"年龄"、"成绩" 列的 DataFrame,完成:

    • 筛选出年龄大于 20 且成绩在 80 分以上的行
    • 将所有成绩低于 60 分的记录修改为 "不及格"(原成绩列保留数值,新增 "是否及格" 列)
      # 题目2:数据筛选与修改
      print("\n=== 题目2:数据筛选与修改 ===")
      # 创建DataFrame
      data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七'],'年龄': [19, 21, 22, 18, 23],'成绩': [85, 76, 92, 58, 63]
      }
      df = pd.DataFrame(data)
      print("原始数据:")
      print(df)# 筛选出年龄大于20且成绩在80分以上的行
      filtered = df[(df['年龄'] > 20) & (df['成绩'] > 80)]
      print("\n年龄大于20且成绩在80分以上的记录:")
      print(filtered)# 新增"是否及格"列
      df['是否及格'] = df['成绩'].apply(lambda x: '及格' if x >= 60 else '不及格')
      print("\n添加是否及格列后的数据:")
      print(df)

  3. 缺失值处理
    题目:有一个包含缺失值的 DataFrame(包含 "日期"、"销售额" 列),请:

    • 检测并统计各列缺失值数量
    • 用该列的平均值填充销售额的缺失值
    • 删除日期列仍有缺失值的行
      # 题目3:缺失值处理
      print("\n=== 题目3:缺失值处理 ===")
      # 创建包含缺失值的DataFrame
      dates = pd.date_range(start='2023-01-01', periods=7)
      sales = [1000, np.nan, 1200, np.nan, 1500, 1300, np.nan]
      sales_df = pd.DataFrame({'日期': dates, '销售额': sales})
      print("包含缺失值的数据:")
      print(sales_df)# 检测并统计各列缺失值数量
      print("\n各列缺失值数量:")
      print(sales_df.isnull().sum())# 用平均值填充销售额的缺失值
      sales_mean = sales_df['销售额'].mean()
      sales_df['销售额'] = sales_df['销售额'].fillna(sales_mean)
      print("\n填充缺失值后的销售额数据:")
      print(sales_df)

  4. 数据合并
    题目:现有两个 DataFrame:

    • df1 包含 "学生 ID"、"姓名"
    • df2 包含 "学生 ID"、"语文成绩"、"数学成绩"
      请将两表根据 "学生 ID" 合并,并新增 "总成绩" 列(语文 + 数学)
      # 题目4:数据合并
      print("\n=== 题目4:数据合并 ===")
      # 创建两个DataFrame
      df1 = pd.DataFrame({'学生ID': [1, 2, 3, 4],'姓名': ['张三', '李四', '王五', '赵六']
      })df2 = pd.DataFrame({'学生ID': [1, 2, 3, 5],'语文成绩': [85, 92, 78, 88],'数学成绩': [90, 88, 95, 76]
      })print("学生信息:")
      print(df1)
      print("\n成绩信息:")
      print(df2)# 合并两个DataFrame
      merged_df = pd.merge(df1, df2, on='学生ID', how='outer')
      print("\n合并后的数据:")
      print(merged_df)# 新增总成绩列
      merged_df['总成绩'] = merged_df['语文成绩'] + merged_df['数学成绩']
      print("\n添加总成绩后的数据:")
      print(merged_df)

  5. 分组与聚合
    题目:对一个包含 "部门"、"姓名"、"工资" 列的 DataFrame,按部门分组后计算:

    • 各部门的平均工资
    • 每个部门工资最高的员工姓名及工资
      # 题目5:分组与聚合
      print("\n=== 题目5:分组与聚合 ===")
      # 创建员工数据
      employees = pd.DataFrame({'部门': ['技术部', '技术部', '市场部', '市场部', '人事部', '技术部'],'姓名': ['张三', '李四', '王五', '赵六', '钱七', '孙八'],'工资': [8000, 9500, 7500, 8500, 7000, 10000]
      })
      print("员工数据:")
      print(employees)# 按部门分组计算平均工资
      dept_avg_salary = employees.groupby('部门')['工资'].mean()
      print("\n各部门平均工资:")
      print(dept_avg_salary)# 每个部门工资最高的员工
      max_salary = employees.groupby('部门')['工资'].max()
      # 合并获取最高工资员工的完整信息
      result = pd.merge(employees, max_salary, on=['部门', '工资'], how='inner')
      print("\n各部门工资最高的员工:")
      print(result)

  6. 数据转换
    题目:将一个 Series(值为字符串,格式如 "2023-10-01")转换为:

    • datetime 类型
    • 新增一个 Series 存储对应的月份(1-12)
    • 统计每个月份出现的次数
      # 题目6:数据转换
      print("\n=== 题目6:数据转换 ===")
      # 创建日期字符串Series
      date_series = pd.Series(['2023-10-01', '2023-10-15', '2023-11-02', '2023-11-20', '2023-12-05', '2024-01-10'
      ])
      print("原始日期字符串:")
      print(date_series)# 转换为datetime类型
      date_series = pd.to_datetime(date_series)
      print("\n转换为datetime类型后:")
      print(date_series)# 提取月份
      month_series = date_series.dt.month
      print("\n提取的月份:")
      print(month_series)# 统计每个月份出现的次数
      month_counts = month_series.value_counts().sort_index()
      print("\n每个月份出现的次数:")
      print(month_counts)

http://www.dtcms.com/a/290890.html

相关文章:

  • 141、环形链表
  • 前后端分离项目进阶1---后端
  • 果园里的温柔之手:Deepoc具身智能如何重塑采摘机器人的“生命感知”
  • Python day20 - 特征降维之奇异值分解
  • 【设计模式C#】工厂方法模式(相比简单工厂模式更加具有灵活性和扩展性的工厂模式)
  • git_guide
  • prometheus主动服务发现机制
  • 在 React 中实现全局防复制hooks
  • Java 解析前端上传 ZIP 压缩包内 Excel 文件的完整实现方案
  • Neo4j 5.x版本的导出与导入数据库
  • 易语言+懒人精灵/按键中控群控教程(手机、主板机、模拟器通用)
  • CFD总压边界条件的理解与开发处理
  • DM8数据库Docker镜像部署最佳实践
  • 自学鸿蒙测试day01-插件安装推荐
  • Vue 3 响应式原理详细解读【一】—— Proxy 如何突破 defineProperty 的局限
  • 计算机发展史:晶体管时代的技术飞跃
  • Boost库智能指针boost::shared_ptr详解和常用场景使用错误示例以及解决方法
  • 软件测试 —— A / 入门
  • 数据结构 之 【排序】(直接插入排序、希尔排序)
  • 基于 Nginx 搭建 OpenLab 多场景 Web 网站:从基础配置到 HTTPS 加密全流程
  • Nginx IP授权页面实现步骤
  • Grok网站的后端语言是php和Python2.7
  • Python 变量赋值与切片语法(in-place 修改 vs 重新赋值)
  • 《画布角色的双重灵魂:解析Canvas小游戏中动画与碰撞的共生逻辑》
  • 状压DP学习笔记[浅谈]
  • 计算机网络:概述层---计算机网络的性能指标
  • IFN影视官网入口 - 4K影视在线看网站|网页|打不开|下载
  • 算法训练营DAY37 第九章 动态规划 part05
  • Linux开发⊂嵌入式开发
  • 复制docker根目录遇到的权限问题