переформатирование последовательного файла данных в фрейм данных с использованием pandas

#python #pandas #sequential

#python #панды #последовательный

Вопрос:

У меня есть входной файл, теперь преобразованный в 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. Почему вы хотите использовать pandas для этого? Что не так со встроенными структурами данных Python, такими как словари и списки?

2. Привет, вы должны переформатировать данные, повторяя каждую строку и помещая каждую строку в виде пары ключ-значение или списка, а затем предоставить ее api DataFrme. pandas не имеет здесь ничего общего с неструктурированными данными. Pandas создан для чтения структурированных данных. Когда данные хранятся в формате json, xml, db table, csv в соответствующем формате.

3. Структурированы ли ваши исходные данные так, чтобы имена содержались в столбце, а каждое значение — в отдельном поле? Например, row1: name, value1, value2, value3 , row2: survey, a, b, c

4. Причина использования pandas заключается в том, что результат должен быть объединен с другими фреймами данных. Конечный пункт назначения должен быть загружен либо непосредственно в базу данных SQL, либо через файл json.

5. Данные структурированы, как упоминает Марк, и вложены в четыре уровня. Таким образом, четыре уровня будут составлять одну строку фрейма данных. Имена столбцов будут применены к окончательной структуре.

Ответ №1:

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

Комментарии:

1. Я использовал это решение, затем преобразовал результат в фрейм данных pandas, и, наконец, вывел в файл json для массовой загрузки в базу данных SQL Server.