переформатирование файла последовательных данных во фрейм данных с использованием панд - PullRequest
1 голос
/ 16 апреля 2019

У меня есть входной файл, теперь преобразованный в 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'

1 Ответ

0 голосов
/ 16 апреля 2019

Вы можете сделать это без использования 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
...