为了账号安全,请及时绑定邮箱和手机立即绑定

将Excel两列标题从列转换为行数据框python

将Excel两列标题从列转换为行数据框python

qq_笑_17 2023-09-05 19:48:19
我有一个代码可以将带有两个标题的数据的 Excel 文件转换为数据帧。不知何故,我的代码没有达到我的预期:import pandas as pddf = pd.read_excel('excel_file.xlsx', sheet_name='Class', header=None, names= header_names, skiprows=2)不知怎的,我收到了一个奇怪的输出:NaN NaN NaT        NaN      NaN NaT                       3  NaN NaT   2015-06-30        4  NaNETC。我不知道我做错了什么。我的 Excel 文件的结构如下,但包含更多列。A                   B                   C   math                biology             physics                             01.06.2015  3       01.06.2015  3       01.06.2015  330.06.2016  4       30.06.2016  4       30.06.2016  415.06.2017  1       15.06.2017  3       15.06.2017  320.06.2018  3       20.06.2018  2       20.06.2018  515.06.2019  2       15.06.2019  3       15.06.2019  2预期的数据帧输出应该是这样的:date        grade   course  group01.06.2015  3       math    A30.06.2016  4       math    A15.06.2017  1       math    A20.06.2018  3       math    A15.06.2019  2       math    A01.06.2015  3       biology B30.06.2016  4       biology B15.06.2017  3       biology B20.06.2018  2       biology B15.06.2019  3       biology B01.06.2015  3       physics C30.06.2016  4       physics C15.06.2017  3       physics C20.06.2018  5       physics C15.06.2019  2       physics C
查看完整描述

1 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

仅通过读取这些数据,您将无法获得所显示的输出。此外,您还可以跳过包含课程和小组信息的 2 行。我要做的是:


import pandas as pd

df = pd.read_excel('stack.xlsx',header=None, skiprows=3)


df = pd.DataFrame(df)


0   1   2   3   4   5

0   01.06.2015  3   01.06.2015  3   01.06.2015  3

现在,更改列的名称


df.columns=['math A','grade A', 'Bio B','grade B','physic C', 'grade C']



math A  grade A Bio B   grade B physic C    grade C

0   01.06.2015  3   01.06.2015  3   01.06.2015  3

之后,您可以迭代这些行并使用您想要的输出创建一个新的数据框:)


像这样的3个循环,你会得到你想要的,只要记住你不能用i = 0初始化,但i你将开始下一个循环,是你完成上一个循环的i


df_wanted = pd.DataFrame(columns=['date','grade','course','group'])

i = 0

for index,row in df[['math A','grade A']].iterrows():

    df_wanted.loc[i,'date'] = row[0]

    df_wanted.loc[i,'grade'] = row[1]

    df_wanted.loc[i,'course'] = 'math'

    df_wanted.loc[i,'group'] = 'A'

    i+=1


date    grade   course  group

0   01.06.2015  3   math    A


查看完整回答
反对 回复 2023-09-05
  • 1 回答
  • 0 关注
  • 120 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信