栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

【基础题】不用pandas读取csv文件的成绩数据处理题

Python 更新时间:发布时间: 百科书网 趣学号
学习总结

(1)用for的i默认是从0开始,如果想要要从1开始遍历,可以对后面的range处理
(2)题目是不用pandas对csv文件(数据之间是逗号间隔)处理,所以需要利用open后readlines后的每行数据,依次找到当前的第一个,位置,然后将前面用过的数据去掉。如下如处理:

with open("student.csv") as file:
    con = file.readlines() 
    # print(con)
    for i in range(1, len(con)):
        line = con[i]

文章目录
  • 学习总结
  • 一个简单题目的背景
  • 一、不用pandas
  • 二、pandas库
  • 三、csv库
  • Reference

一个简单题目的背景

一个csv表有姓名、性别、成绩,用python得出男生和女生分别的的平均分,并且排序输出大于平均分的学生名单,不要直接用python自带的函数,最好自己敲排序和求平均数的函数

如果直接用pandas相信所有人都知道用pandas.read_csv函数或者使用csv,而如果只不能用pandas,则用open打开文件后用readlines读取csv文件的多行内容。

一、不用pandas

首先自己先随便写个csv文件的学生数据(csv文件的数据以逗号间隔):

姓名,性别,成绩
佩奇哥,男,20
刘德华,男,100
张学友,女,40
张继科,男,80
杨幂,女,60
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 29 17:07:02 2021

@author: 86493
"""
# 方法三改进:只使用open
classmate = {} 
lst = []
class student:
    def __init__(self, name, sex, score):
        self.name = name
        self.sex = sex
        self.score = score
        self.StudentDict = {'name': name,
                            'sex': sex,
                            'score': score}  
"""        
exp = "andyguo"
ret = exp.find(',')
print(ret) # -1表示没有找到结果
"""

with open("student.csv") as file:
    con = file.readlines() 
    # print(con)
    for i in range(1, len(con)):
        line = con[i]
        line = line.replace("n", "") # 把最后一个n去掉
        # print(line)
        pos1 = line.find(',')
        name = line[:pos1]
        sex = line[pos1 + 1]
        score = line[pos1 + 3:]
        stu = student(name, sex, score)
        # print(stu.StudentDict)
        classmate.update({stu.name: stu.StudentDict})
        lst.append(stu.StudentDict)

print("全班同学的字典:n", classmate)

# 求男女生的平均分
BoyNum, GirlNum, BoyScoreSum, GirlScoreSum = 0, 0, 0, 0
EndBoyLst, EndGirlLst = [], []

for astu in lst:
    astu['score'] = int(astu['score'])
    if astu['sex'] == '男':
        # print(astu['score'])
        # print(type(astu['score'])) # 如果没加上int那句则是
        BoyScoreSum += astu['score']
        BoyNum += 1
        #EndBoyLst.append(astu['name']) # 加入男生结果列表
    elif astu['sex'] == '女':
        GirlScoreSum += astu['score'] 
        GirlNum += 1
        #EndGirlLst.append(astu['name'])
        
baverage = BoyScoreSum / BoyNum
gaverage = GirlScoreSum / GirlNum 

# 判断并存入结果
for astu in lst:
    astu['score'] = int(astu['score'])
    if astu['sex'] == '男' and astu['score'] > baverage:
        EndBoyLst.append(astu['name']) # 加入男生结果列表
    elif astu['sex'] == '女' and astu['score'] > gaverage:
        EndGirlLst.append(astu['name'])
print("过平均分的男生:n", EndBoyLst)
print("过平均分的女生:n", EndGirlLst)

结果为:

全班同学的字典:
 {'佩奇哥': {'name': '佩奇哥', 'sex': '男', 'score': '20'}, 
 '刘德华': {'name': '刘德华', 'sex': '男', 'score': '100'}, 
 '张学友': {'name': '张学友', 'sex': '女', 'score': '40'}, 
 '张继科': {'name': '张继科', 'sex': '男', 'score': '80'}, 
 '杨幂': {'name': '杨幂', 'sex': '女', 'score': '60'}}

过平均分的男生:
 ['刘德华', '张继科']
过平均分的女生:
 ['杨幂']
二、pandas库
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 29 15:00:45 2021

@author: 86493
"""
# 方法一:用pandas读取csv
import pandas as pd
file = pd.read_csv('student.csv', encoding = 'GB18030')
df = pd.Dataframe(file)
print(df)
print(df.shape) # (5, 3)即五行三列
classmate = {} 
 

class student:
    def __init__(self, name, sex, score):
        self.name = name
        self.sex = sex
        self.score = score
        self.StudentDict = {'name': name,
                            'sex': sex,
                            'score': score}
      
for i in range(df.shape[0]):
    print(i)
    name = df.loc[i, '姓名']
    sex = df.loc[i, '性别']
    score = df.loc[i, '成绩']
    stu = student(name, sex, score)
    # print(stu.StudentDict)
    classmate.update({stu.name: stu.StudentDict})

print(classmate)

结果为:

    姓名 性别   成绩
0  佩奇哥  男   20
1  刘德华  男  100
2  张学友  女   40
3  张继科  男   80
4   杨幂  女   60
(5, 3)
0
1
2
3
4
{'佩奇哥': {'name': '佩奇哥', 'sex': '男', 'score': 20}, 
'刘德华': {'name': '刘德华', 'sex': '男', 'score': 100}, 
'张学友': {'name': '张学友', 'sex': '女', 'score': 40}, 
'张继科': {'name': '张继科', 'sex': '男', 'score': 80}, 
'杨幂': {'name': '杨幂', 'sex': '女', 'score': 60}}
三、csv库
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 29 16:48:30 2021

@author: 86493
"""
# 方法二:用csv函数读取csv
import numpy as np
import csv
classmate = {} 

class student:
    def __init__(self, name, sex, score):
        self.name = name
        self.sex = sex
        self.score = score
        self.StudentDict = {'name': name,
                            'sex': sex,
                            'score': score}  

with open('student.csv', encoding = 'GB18030')as csvfile:
    spamreader = csv.reader(csvfile)
    for row in spamreader:
        print(row)
        print(row[0])
        name = row[0]
        sex = row[1]
        score = row[2]
        stu = student(name, sex, score)
        # print(stu.StudentDict)
        classmate.update({stu.name: stu.StudentDict})
                
print(classmate)

结果为:

['姓名', '性别', '成绩']
姓名
['佩奇哥', '男', '20']
佩奇哥
['刘德华', '男', '100']
刘德华
['张学友', '女', '40']
张学友
['张继科', '男', '80']
张继科
['杨幂', '女', '60']
杨幂
{'姓名': {'name': '姓名', 'sex': '性别', 'score': '成绩'}, 
'佩奇哥': {'name': '佩奇哥', 'sex': '男', 'score': '20'}, 
'刘德华': {'name': '刘德华', 'sex': '男', 'score': '100'}, 
'张学友': {'name': '张学友', 'sex': '女', 'score': '40'}, 
'张继科': {'name': '张继科', 'sex': '男', 'score': '80'}, 
'杨幂': {'name': '杨幂', 'sex': '女', 'score': '60'}}
Reference

(1)python读取cvs文件内容如何区分分隔逗号和内容中的逗号
(2)python读取csv文件的三种方式

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/280447.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号