我有一个输入文件,现在将其转换为pandas.dataframe
。记录/行按顺序排列,其中包含以下形式的相关数据
survey, a, b, c
section, 1, 2, 3
observation, a, b, c
values, 1, 2, 3
values, 4, 5, 6
observation, d, e, f
values, 7, 8, 9
section, 4, 5, 6
...
调查记录仅发生一次。 一个部分可能会多次出现,并将包含观察和价值记录。 观察值后面总是带有值,有时是多个记录。
我正在尝试将其重新格式化为行,其中每组值都在单独的行中,并带有相应的调查,部分和观察。
survey, a,b,c, section, 1,2,3, observation, a,b,c, values, 1,2,3
survey, a,b,c, section, 1,2,3, observation, a,b,c, values, 4,5,6
survey, a,b,c, section, 1,2,3, observation, d, e, f, values, 7, 8, 9
survey, a,b,c, section, 4, 5, 6 and so on....
这可以用pandas
完成吗?还是应该遍历if,then else结构?
到目前为止,我尝试过的方法如下(这些方法可能过于简单且朝错误的方向前进):
#pd.DataFrame(hmdDataToProcess.unstack())
#hmdDataToProcess.unstack
#hmdDataToProcess.stack
#pd.melt(hmdDataToProcess, id_vars =[0], value_vars =
['SURVEY','SECTION','OBSERV','OBVAL'])
#df2 = hmdDataToProc0ess.pivot_table(index = [0]).reset_index()
#df2 = df_in.pivot_table(index =
#['Example1','Example2'],columns='VC', values=
#['Weight','Rank']).reset_index()
#hmdDataToProcess.groupby('SECTION').groups #, 'OBSERV', 'OBVAL'
答案 0 :(得分:0)
您可以不使用Pandas
s = '''survey, a, b, c
section, 1, 2, 3
observation, a, b, c
values, 1, 2, 3
values, 4, 5, 6
observation, d, e, f
values, 7, 8, 9
section, 4, 5, 6'''
list_s = s.strip().split('\n')
list_s = [x.strip() for x in list_s]
list_s
# ['survey, a, b, c', 'section, 1, 2, 3', 'observation, a, b, c', 'values, 1, 2, 3', 'values, 4, 5, 6', 'observation, d, e, f', 'values, 7, 8, 9', 'section, 4, 5, 6']
for el in list_s:
if el.split(',')[0] == 'survey':
survey = el
if el.split(',')[0] == 'section':
section = el
if el.split(',')[0] == 'observation':
observation = el
if el.split(',')[0] == 'values':
print(f"{survey},{section},{observation},{el}")
#survey, a, b, c,section, 1, 2, 3,observation, a, b, c,values, 1, 2, 3
#survey, a, b, c,section, 1, 2, 3,observation, a, b, c,values, 4, 5, 6
#survey, a, b, c,section, 1, 2, 3,observation, d, e, f,values, 7, 8, 9