简单选取给定文件中的结果
初学python做一些小练习
不多BB先上代码
#驱动文件,导入了另外两个写好的py文件
import pandas as pd
from DataProcessing import *
from Late_Statistics import *
#这两个参数的默认设置都是False
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
#读取文件、dataframe
data = ReadFile()
data1 = data.Establish()
data3 = LateNumber()
print('你需要对dorm.test.txt中晚归人数进行统计吗?')
chose = input('需要请输入1: ')
if chose == '1':
while data3.LateNumber == 0 :
print('--------------------请等待---------------------')
print('-----------------预计花费40秒------------------\n\n')
data3.Cauculation()
else:
pass
#数据统计(最值,均值)
print(data.names)
str_2 = input('您想知道的详细数据的列名:')
#dia
data1_max = data.GetMax(data1,str_2)
data1_min = data.GetMin(data1,str_2)
data1_aug = data.GetAug(data1,str_2)
data1_sum = data.GetSum(data1,str_2)
print('---------------三十名学生数据归纳(1)----------------')
print('%s的最大值:%.2f'%(str_2,data1_max))
print('%s的最低值:%.2f'%(str_2,data1_min))
print('%s的平均值: %.2f'%(str_2,data1_aug))
print('%s的总和值:%.2f'%(str_2,data1_sum))
print('-----------------------结束---------------------------')
#数据统计(最大占比项)
print(data.names)
data2 = data.GroupBy(data1)
data2_1 = data.DetailedCalculation(data2)
#对于筛选晚归人数,笔者现在还无法筛选出前一天离校第二条回归的情况
import pandas as pd
import time
import os
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
class LateNumber:
LateNumber = 0
def Cauculation(self):
# 读取文件
data1 = pd.read_csv('dorm_test.txt', encoding='UTF-8', header=None, names=['学号', '时间', '信号'])
# 学号,信号data1
data1_1 = data1.drop(labels=['时间'], axis=1)
# 时间data1_2
data1_2 = pd.to_datetime(data1.时间, format='%Y-%m-%d')
# 将时间data存入到一个新的dorm_1.txt中
data1_2.to_csv('dorm_1.txt', encoding='UTF-8', index=False)
# 读出dorm_1.txt data1_3
data1_3 = pd.read_csv('dorm_1.txt', encoding='UTF-8', header=None, names=['日期', '时间'], sep=' ')
# 将日期剖开 data1_4
data1_4 = data1_3['日期'].str.split('-', expand=True)
# 将时间剖开
data1_5 = data1_3['时间'].str.split(':', expand=True)
# 将日期剖开data存入到一个新的dorm_2.txt中
data1_4.to_csv('dorm_2.txt', encoding='UTF-8', index=False)
# 对dorm_2进行修改
lines_1 = (i for i in open('dorm_2.txt', 'r') if
'0,1,2' not in i) # 不用readlines是因为for i in f是使用一行读取一行,不会消耗太多的内存
f1 = open('D:/PycharmPro/source/test/dorm_4.txt', 'w', encoding="utf-8")
f1.writelines(lines_1)
f1.close()
os.rename('dorm_2.txt', 'dorm_2.bak')
os.rename('dorm_4.txt', 'dorm_2.txt')
os.remove('dorm_2.bak')
# 将时间剖开data存入到一个新的dorm_3.txt中
data1_5.to_csv('dorm_3.txt', encoding='UTF-8', index=False)
# 对dorm_3进行修改
lines_2 = (i for i in open('dorm_3.txt', 'r') if
'0,1,2' not in i) # 不用readlines是因为for i in f是使用一行读取一行,不会消耗太多的内存
f2 = open('D:/PycharmPro/source/test/dorm_5.txt', 'w', encoding="utf-8")
f2.writelines(lines_2)
f2.close()
os.rename('dorm_3.txt', 'dorm_3.bak')
os.rename('dorm_5.txt', 'dorm_3.txt')
os.remove('dorm_3.bak')
# # 读取data1_4
data1_6 = pd.read_csv('dorm_2.txt', encoding='UFT-8', header=None, names=['年', '月', '日'])
# 读取data1_5
data1_7 = pd.read_csv('dorm_3.txt', encoding='UFT-8', header=None, names=['时', '分', '秒'])
# 合并一个全新可用的data2
data2 = pd.concat([data1_1, data1_6, data1_7], axis=1, ignore_index=False)
# print(data2)
# 筛选晚归学生
# 信号 == 0 表示 '出' 信号 == 1 表示 '进'
data2_late = data2[['学号', '年', '月', '日']][(data2.信号 == 1) & (data2.时 >= 23) & (data2.分 >= 0) & (data2.秒 >= 0)]
# print(data2_late)
# 还有一种情况:前一天出去,第二天早上
# 计算晚归人数
self.LateNumber = data2_late.shape[0]
print('---------------学生晚归人数归纳----------------')
print('dorm_test.txt中\n在晚上十一点后归校的学生有:%d人' % self.LateNumber)
print('--------------------结束-----------------------\n\n')
print('---------------学生详细数据统计----------------')
因为是初学练习,所以在写代码的时候是对DataFrame进行操作
碰到了一个问题,驱动函数加入 if __name__ = _'main'_:
的时候发现程序不出结果了,希望大佬们给点解决办法。
dorm_test.txt文件太大了,有三百万行就不上传了。
To Be Continued…