pandas 的series和dataframe的用法,六个题目
创建与访问
题目:创建一个包含 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])
数据筛选与修改
题目:给定一个包含 "姓名"、"年龄"、"成绩" 列的 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)
缺失值处理
题目:有一个包含缺失值的 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)
数据合并
题目:现有两个 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)
分组与聚合
题目:对一个包含 "部门"、"姓名"、"工资" 列的 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)
数据转换
题目:将一个 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)