如何在python数据框架中存储调查答案
我必须做一个调查,然后将许多学生的答案保存在一个数据框中。我尝试将答案存储在列表中,但不起作用,因为当我尝试将答案保存在数据框中时,我得到的数据框在同一列中包含多个答案,而不是答案数的多行。 这是我的调查如何在python数据框架中存储调查答案,python,pandas,store,survey,Python,Pandas,Store,Survey,我必须做一个调查,然后将许多学生的答案保存在一个数据框中。我尝试将答案存储在列表中,但不起作用,因为当我尝试将答案保存在数据框中时,我得到的数据框在同一列中包含多个答案,而不是答案数的多行。 这是我的调查 sex=input('your sex: ') sex_list.append(sex) country=input('where do you come from?: ') country_list.append(country) sport=input('have you ever pla
sex=input('your sex: ')
sex_list.append(sex)
country=input('where do you come from?: ')
country_list.append(country)
sport=input('have you ever play sport?: ')
sport_list.append(sport)
if sport=='no':
reason_no_sport=input('why didnt you play sport?:')
reason_no_sport_list.append(reason_no_sport)
else:
reason_no_sport=np.nan
reason_no_sport_list.append(reason_no_sport)
football=input('have you ever play football?: ')
football_list.append(football)
basket=input('have you ever play basket?: ')
basket_list.append(basket)
swimming=input('have you ever play swimming?: ')
swimming_list.append(swimming)
这是名单
sex_list=[]
country_list=[]
sport_list=[]
reason_no_sport_list=[]
football_list=[]
basket_list=[]
swimming_list=[]
这是数据帧
df = pd.DataFrame({"sex": [sex_list],
"country": [country_list],
"sport":[sport_list],
"why didnt you play sport?": [reason_no_sport_list],
"football":[football_list],
"basket":[basket_list],
"swimming":[swimming_list]})
这是一个类似的结果
sex=`[male, female]`
country= `[usa, england]`
我为你的问题提供一个可能的解决办法。我创建列表,并在其中添加答案:
sex=[]
country=[]
sport=[]
reason_no_sport=[]
football=[]
basket=[]
swimming=[]
interview='doing'
while interview.upper()=='DOING':
if((input('Can you answer some questions?: ')).upper()=='YES'):
sex.append(input('your sex: '))
country.append(input('where do you come from?: '))
s=input('have you ever play sport?: ')
sport.append(s)
if s.upper() == 'NO':
reason_no_sport.append(input('why didnt you play sport?:'))
football.append(np.nan)
basket.append(np.nan)
swimming.append(np.nan)
else:
reason_no_sport.append(np.nan)
football.append(input('have you ever play football?: '))
basket.append(input('have you ever play basket?: '))
swimming.append(input('have you ever play swimming?: '))
if((input('Do you want to do another interview?: ')).upper()=='YES'):
continue
else:
break
df=pd.DataFrame()
df['sex']=sex
df['country']=country
df['sport']=sport
df['reason_no_sport']=reason_no_sport
df['football']=football
df['basket']=basket
df
输出示例:
您还可以创建一个列表(
name
)并询问名称,并将其用作DataFrame
索引:
name=[]
name.append(输入('您的名字:'))
df.reindex(名称)
我得到的数据框在同一列中有多个答案,而不是答案数的多行
要解决这个问题,只需做以下工作:
df = pd.DataFrame({"sex": sex_list,
"country": country_list,
"sport": sport_list,
"why didnt you play sport?": reason_no_sport_list,
"football": football_list,
"basket": basket_list,
"swimming": swimming_list})
因为它们已经在列表中,所以不需要使用另一对方括号将它们包装到另一个列表中
正确构建数据帧
但是要小心:您可能希望在最终数据框中为每个回答调查的人指定一行。列表不记得这一点,因为在您的调查中,您不会每次都将元素添加到所有列表中(您有if-else
)
要解决这个问题,有两种方法
if-else
语句,以便在用户不回答问题时,将None
值添加到相应列表中,如中所述例如,您可以通过以下操作创建空数据帧:
column_names = ["sex","country","sport",
"reason_no_sport_list","football","basket","swimming"]
df = pd.DataFrame(columns=column_names)
然后,每次您向其他人建议调查时,在您的df
末尾添加一行None
值:
df = df.append(pd.Series([None]*len(column_names), index=column_names), ignore_index=True)
然后,您可以在询问时直接编辑df
的最后一行。例如:
sex = input('your sex: ')
df.loc[len(df)-1, 'sex'] = sex
你好您应该添加代码的相关部分,即尝试将列表转换为数据帧的部分。请把你的帖子添加进去。
df = df.append(pd.Series([None]*len(column_names), index=column_names), ignore_index=True)
sex = input('your sex: ')
df.loc[len(df)-1, 'sex'] = sex