[DHU数据科学]HW4

import pandas as pd
import numpy as np
# 1. (简答题)
# 数据清洗:
print("\n) 1)从studentsInfo.xlsx 文件的 Group1表单中读取数据;")
file_name=r"D:\prog\studentsInfo.xlsx"
sheet='Group1'
df=pd.read_excel(io=file_name,sheet_name=sheet)
print(df)
print("\n 2)将“案例教学”列数据值全改为NaN")
df['案例教学']=np.nan
print(df)
print("\n3)滤除每行数据中缺失3项以上(包括 3 项)的行;")
df.dropna(axis=0,thresh=6,inplace=True)
print(df)
print("\n) 4)滤除值全部为 NaN 的列;")
df.dropna(axis=1,how='all',inplace=True)
print(df)
# 数据填充:
print("\n 2)使用列的平均值填充“体重”和“成绩”列的 NaN 数据;")
df['体重']=df["体重"].fillna(df['体重'].mean())
df['成绩']=df["成绩"].fillna(df['成绩'].mean())
print(df)
print("\n3)使用上一行数据填充“年龄”列的 NaN 数据;")
df["年龄"] = df["年龄"].ffill()
print(df)
print("\n) 4)使用“中位数”填充“生活费用 NaN 数据")
df['月生活费']=df['月生活费'].fillna(df['月生活费'].median())
print(df)
df.to_excel("D:\\prog\\studentsInfo_modified.xlsx", index=False)
# 【提示】 使用 df [“生活费用”].median() 计算中位数。
import pandas as pd
# 数据合并:
print("\n1)从 studentsInfo.xlsx 的“ Group3”页读取数据,将序号、性别、年龄项保存到data1对象;")
file_name = r"D:\prog\studentsInfo.xlsx"
sheet = 'Group3'
df = pd.read_excel(io=file_name, sheet_name=sheet)
data1 = df[["序号", "性别", "年龄"]]
print(data1)
print("\n2)从 studentsInfo.xlsx 的“ Group3” 页读取数据,将序号、身高、体重、成绩项保存到 data2 对象;")
data2 = df[['序号', '身高', '体重', '成绩']]
print(data2)
print("\n3)将 data2 合并到 data1 中,连接方式为内连接。")
df_merge=pd.merge(data1, data2, how='inner')
print(df_merge)
# 数据排序和排名:
# 1)使用上述数据合并的数据;
print("\n2)按月生活费对数据升序排序;")
df.sort_values(by='月生活费', ascending=True, inplace=True)
print(df)
print("\n3)按身高对数据降序排名,并列取值方式设置为 min。")
df['身高'] = df['身高'].rank(ascending=False, method='min')
print(df)
import pandas as pd
# 3. (简答题)
# 根据某系的实验教学计划,完成以下分析:
print("\n 1) 读取 DataScience.xls 文件数据,创建为 DataFrame 数据对象df;")
file_name = r"D:\prog\DataScience.xls"
df = pd.read_excel(file_name)
print(df)

print("\n  2) 查询 df 的数据量和基本结构( df.index,df.columns);")
print(df.index)
print(df.columns)

print("\n 3) 查询 df 中是否含有 NaN 数据?将含有 NaN 数据的行导出为数据文件pre.csv ,判断采用何种数据清洗模式:填充、删除或手工填充;")
has_nan = df.isnull().values.any()
print(has_nan)
if has_nan:
    rows_nan = df[df.isnull().any(axis=1)]
    rows_nan.to_csv('D:\\prog\\pre.csv', index=False)
    pre = pd.read_csv('D:\\prog\\pre.csv')
    pre.dropna(axis=0, how='all', inplace=True)
    pre = pre.fillna({'星期': 4.0, '节次': '5~7', '课程名称': '数据科学导论', '二级实验室名称': '人工智能实验室',
                      '实验地点门牌号': '11-305'})
    print(pre)
    df.update(pre)

print("\n 4) 查询课程名称、实验项目名称、实验类型和二级实验室四列数据内容;")
selected_columns = ['课程名称', '实验项目名称', '实验类型', '二级实验室名称']
df_selected = df[selected_columns]
print("查询结果:")
print(df_selected)

print("\n 5) 统计每一门课程的实验课时数;")
course_hours = df.groupby('课程名称')['实验课时数'].sum().reset_index()
course_hours.columns = ['课程名称', '总实验课时数']
print(course_hours)

print("\n  6) 统计每周开设所有实验课时数;")
week_hours = df.groupby('周次')['实验课时数'].sum().reset_index()
week_hours.columns = ['周次', '总实验课时数']
print(week_hours)

print("\n  7) 统计每门课程的实验类型分布( crosstab);")
course_type = pd.crosstab(df['课程名称'], df['实验类型'])
print(course_type)

print("\n  8) 统计每个班级的实验课课表;")
course_class = pd.crosstab(df['实验项目名称'], df['班级'])
print(course_class)

print("\n 9)分析各二级实验室承担的实验课时量;")
lab_hours = df.groupby('二级实验室名称')['实验课时数'].sum().reset_index()
lab_hours.columns = ['二级实验室名称', '总实验课时数']
print(lab_hours)

print("\n 10)分析各二级实验室能够支持的实验类型。")
lab_type = pd.crosstab(df['二级实验室名称'], df['实验类型'])
print(lab_type)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Juneeeeeeeeeeeee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值