python中用pandas处理数据

 

对于这种csv文件,用pandas怎么可以将红圈部分的数据补全,每个学生都考了四门,怎样可以进行数据补全,整个csv文件也没有空值。

求大佬支援

 

试下这种方式:

先构造一个姓名和科目的二维表, 然后merge. 可以对缺失值进行填充

import pandas as pd
import numpy as np

data = pd.read_excel('c:/users/yyz/desktop/123.xlsx')

lis1 = data['科目'].unique().tolist()
lis2 = data['姓名'].unique().tolist()

data2 = pd.DataFrame([[i,j] for i in lis2 for j in lis1],columns=['姓名','科目'])

result = pd.merge(data,data2,on=['姓名','科目'],how='outer').sort_values(by=['姓名','科目']).reset_index(drop=True)
print(result)
           科目          姓名    成绩
0   algorithm  zhaoyuchen  21.0
1    computer  zhaoyuchen  22.0
2     english  zhaoyuchen  20.0
3        math  zhaoyuchen   NaN
4   algorithm      zhouqi  19.0
5    computer      zhouqi   NaN
6     english      zhouqi  18.0
7        math      zhouqi   NaN
8   algorithm     zhoutao  15.0
9    computer     zhoutao  17.0
10    english     zhoutao  14.0
11       math     zhoutao  16.0
12  algorithm         zss  11.0
13   computer         zss  13.0
14    english         zss  10.0
15       math         zss  12.0

 

是指打印输出全部显示吧。这只是控制台在df输出行数多(或列数过多 )时中间部分会以...表示,将其保存到csv中会全部显示的。如需在输出窗口全部显示,那就在代码中打印语句前进行设置,加上pd.set_option("display.max_rows", None)

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632