不得不说,链表那玩意。。。。真的是又臭又长。。。
让我们看看用pandas会怎么样处理这种问题吧!
这是untitled.txt文件的内容
20010145,44
20010145,41
20010147,20
20010147,33
20010189,45
20010189,45
200101?9,30
200101?9,8
第一小步,读取,筛选不包含?的信息
import pandas as pd
df=pd.read_csv('untitled.txt',header=None) #读取数据,header=None使得第一行不会作为列名而是作为数据
df.columns=['学籍号','成绩'] #为了好看加的一行
df=df[df['学籍号'].str.contains("\?")==False]
#series.str被称之为字符串向量化操作,contains就是字面意思包含\?前面的\是转义符号,跟正则有关系
#细节哥应该注意到了选必一应该有提到吧
df2=df.groupby('学籍号',as_index=False).apply(lambda x:pd.Series([x.iloc[0][1],x.iloc[1][1]]))
df2
我们采用最常用的groupby和apply组合,先分组(因为已知两两一组了)
之后使用iloc[0]和iloc[1]快速对应信息和通技的那一行
后面在来个[1]就是只取数字那玩意了,之后转成series生成
df2.columns=['学籍号','信息成绩','通用成绩']
df2