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

我有一个代码可以将带有两个标题的数据的 Excel 文件转换为数据帧。不知何故,我的代码没有达到我的预期:


import pandas as pd


df = 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  NaN

ETC。


我不知道我做错了什么。


我的 Excel 文件的结构如下,但包含更多列。


A                   B                   C   

math                biology             physics 

                            

01.06.2015  3       01.06.2015  3       01.06.2015  3

30.06.2016  4       30.06.2016  4       30.06.2016  4

15.06.2017  1       15.06.2017  3       15.06.2017  3

20.06.2018  3       20.06.2018  2       20.06.2018  5

15.06.2019  2       15.06.2019  3       15.06.2019  2

预期的数据帧输出应该是这样的:


date        grade   course  group

01.06.2015  3       math    A

30.06.2016  4       math    A

15.06.2017  1       math    A

20.06.2018  3       math    A

15.06.2019  2       math    A

01.06.2015  3       biology B

30.06.2016  4       biology B

15.06.2017  3       biology B

20.06.2018  2       biology B

15.06.2019  3       biology B

01.06.2015  3       physics C

30.06.2016  4       physics C

15.06.2017  3       physics C

20.06.2018  5       physics C

15.06.2019  2       physics C


qq_笑_17
浏览 121回答 1
1回答

哈士奇WWW

仅通过读取这些数据,您将无法获得所显示的输出。此外,您还可以跳过包含课程和小组信息的 2 行。我要做的是:import pandas as pddf = pd.read_excel('stack.xlsx',header=None, skiprows=3)df = pd.DataFrame(df)0   1   2   3   4   50   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 C0   01.06.2015  3   01.06.2015  3   01.06.2015  3之后,您可以迭代这些行并使用您想要的输出创建一个新的数据框:)像这样的3个循环,你会得到你想要的,只要记住你不能用i = 0初始化,但i你将开始下一个循环,是你完成上一个循环的idf_wanted = pd.DataFrame(columns=['date','grade','course','group'])i = 0for 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+=1date    grade   course  group0   01.06.2015  3   math    A
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python