在python中清理调查数据 - 如何查找和清理两个文件中的常见行?

问题描述 投票:0回答:1

我正在研究一个调查数据分析项目,该项目包括2个Excel文件 - 在文件预调查中,它包含800多个响应记录;而在调查后的文件中,它包含500个回复。它们都具有(至少)一个公共列SID(学生ID)。 Y之间发生了一些事情,我有兴趣分析Y的有效性,以及Y对不同类别人群的影响。

更复杂的是,在每个Excel文件中,它包含多个选项卡。不同的访调员采访了几位受访者,并在每个标签中记录了不同的调查部分。对于不同的选项卡,列可能相同也可能不同,因此很难在一个文件中编译。 (或者将它们合并为一个有很多空值的实际上是否有意义?)

我正在努力找到同时进行调查前和调查后的学生。如何使用python / pandas /其他包在工作表和文件中执行此操作?

如果您还可以建议解决问题的方法,可以获得奖励。

python pandas analytics data-science data-cleaning
1个回答
3
投票

如果我正确理解这一点,您的数据目前的格式如下

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')

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.