#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.