如何使用Pandas处理CSV出勤字符串数据并绘制百分比柱状图?
解决Pandas绘制出勤百分比柱状图的字符串数据问题
你的CSV数据用A(缺勤)、P(出勤)记录考勤,直接用原字符串列绘图会因非数值数据报错,解决思路是先将字符串转为可计算的数值,再统计出勤百分比,最后完成绘图:
步骤1:读取数据并转换字符串为数值
用replace方法把P替换为1、A替换为0,将考勤列转为数值类型:
import pandas as pd import matplotlib.pyplot as plt # 读取CSV文件 df = pd.read_csv('attendance.csv') # 定义考勤列列表 attendance_cols = ['1', '2', '3', '4', '5'] # 替换字符串为数值:P=1(出勤),A=0(缺勤) df[attendance_cols] = df[attendance_cols].replace({'P': 1, 'A': 0})
步骤2:计算每个学生的出勤百分比
统计每行的出勤次数(求和),除以总天数后乘以100得到百分比:
# 计算出勤百分比:出勤次数/总天数 * 100 df['attendance_percent'] = (df[attendance_cols].sum(axis=1) / len(attendance_cols)) * 100
步骤3:绘制柱状图
基于计算出的百分比列绘图,设置坐标轴标签与布局:
# 绘制柱状图 ax = df.plot(x='NAME', y='attendance_percent', kind='bar', color='maroon', figsize=(10, 6)) ax.set_ylabel('出勤百分比 (%)') ax.set_title('学生出勤百分比统计') plt.xticks(rotation=45) # 旋转X轴标签避免重叠 plt.tight_layout() # 自动调整布局,防止标签被截断 plt.show()
完整可运行代码
import pandas as pd import matplotlib.pyplot as plt # 读取数据 df = pd.read_csv('attendance.csv') # 转换考勤字符串为数值 attendance_cols = ['1', '2', '3', '4', '5'] df[attendance_cols] = df[attendance_cols].replace({'P': 1, 'A': 0}) # 计算出勤百分比 df['attendance_percent'] = (df[attendance_cols].sum(axis=1) / len(attendance_cols)) * 100 # 生成柱状图 ax = df.plot(x='NAME', y='attendance_percent', kind='bar', color='maroon', figsize=(10, 6)) ax.set_ylabel('出勤百分比 (%)') ax.set_title('学生出勤百分比统计') plt.xticks(rotation=45) plt.tight_layout() plt.show()
运行后会得到清晰的柱状图,比如Varane的出勤百分比为80%(4次出勤/5天),其余学生为0%。
内容的提问来源于stack exchange,提问作者Syafiq Syahmi
相关产品推荐
相关产品推荐

