我正在研究一个调查数据分析项目,该项目包括2个Excel文件 - 在文件预调查中,它包含800多个响应记录;而在调查后的文件中,它包含500个回复。它们都具有(至少)一个公共列SID(学生ID)。 Y之间发生了一些事情,我有兴趣分析Y的有效性,以及Y对不同类别人群的影响。
更复杂的是,在每个Excel文件中,它包含多个选项卡。不同的访调员采访了几位受访者,并在每个标签中记录了不同的调查部分。对于不同的选项卡,列可能相同也可能不同,因此很难在一个文件中编译。 (或者将它们合并为一个有很多空值的实际上是否有意义?)
我正在努力找到同时进行调查前和调查后的学生。如何使用python / pandas /其他包在工作表和文件中执行此操作?
如果您还可以建议解决问题的方法,可以获得奖励。
如果我正确理解这一点,您的数据目前的格式如下
survey1.xlsx Sheet 1(面试官a)
STU-ID QUESTION 1 RESPONSE 1 QUESTION 2 RESPONSE 2
00001 tutoring? True lunch a? False
survey1.xlsx表2(访谈员b)
STU-ID QUESTION 1 RESPONSE 1 QUESTION 2 RESPONSE 2
00004 tutoring? True lunch a? TRUE
survey2.xlsx表1
STU-ID QUESTION 1 RESPONSE 1 Tutorer GPA
00001 improvement? True Jim 3.5
survey2.xlsx表2(访问员b)
STU-ID QUESTION 1 RESPONSE 1 Tutorer GPA
00004 improvement? yes Sally 2.8
如果是这种情况,并且不了解数据,我会合并标签,以便预调查具有唯一的学生ID(我不确定同一个学生是否接受过多个测量员的采访)(如果他们是,你是可能需要做一组,但听起来很乱)
然后我会对调查后的回复做同样的事情。然后将它们连接到一个数据帧中。从df创建一个新的DF只有你关心的响应(这可以摆脱一些na答案)。
做一个df.describe和一个df.dtypes
转换数据,使“是/否”等答案成为布尔值,或者至少是它们的格式相同,数字响应相同(int64或float64)
最后,我会回答,以便df遵循您的第一次调查和第二次调查的回复指南。
注意:只有800个响应,在excel中执行此操作可能更容易,如果您对python不熟悉,则需要几个小时才能完成此操作,在excel中,可能需要20分钟。
如果你的目标是学习python,那就去吧
蟒蛇
import pandas as pd
df_s1s1 = pd.read_excel('survey1.xlsx', na_values="Missing", sheet_names='sheet 1', usecols=cols)
df.head()
df_s1s2 = pd.read_excel('survey1.xlsx', na_values="Missing", sheet_names='sheet 2', usecols=cols)
df_s1s2.head()
然后第二个调查文件相同
df_s2s1 = pd.read_excel('survey2.xlsx', na_values="Missing", sheet_names='sheet 1', usecols=cols)
df.head()
df_s2s2 = pd.read_excel('survey2.xlsx', na_values="Missing", sheet_names='sheet 2', usecols=cols)
df_s1s2.head()
将不同的工作表添加到与您使用类似行的行相同的数据框中
df_survey_1 = pd.concat([df_s1s1, df_s1s2])
df_survey_1.head()
那么第二次调查就是一样的
df_survey_2 = pd.concat([df_s2s1, df_s2s2])
df_survey_2.head()
然后使用您将使用的所有列创建更大的数据框
master_df = pd.merge(df_survey_1, df_survey2, left_on='STU_ID', right_on='STU_ID')
掉落NA
master_df = master_df.dropna(axis = 0, how ='any')
希望这可以帮助