2016-01-18 2 views
0

Я пытаюсь создать пригодный для использования Pandas DataFrame из определенного CSV-файла. Файл имеет один столбец для идентификации типа теста, для которого используется строка данных, два столбца, которые идентифицируют измеряемое устройство, а остальные столбцы содержат данные.Python - Pandas - Создание столбцов из записей строк

на вход .csv файл имеет следующий формат:

testtype1, device1name, device1info, meas_1, meas_2, meas_3, ... ... , meas_n 
testtype2, device1name, device1info, meas_1, meas_2, meas_3, ... ... , meas_n 
testtype3, device1name, device1info, meas_1, meas_2, meas_3, ... ... , meas_n 
testtype1, device2name, device2info, meas_1, meas_2, meas_3, ... ... , meas_n 
testtype2, device2name, device2info, meas_1, meas_2, meas_3, ... ... , meas_n 
testtype2, device2name, device2info, meas_1, meas_2, meas_3, ... ... , meas_n 
...  ...   ...   ...  ...  ...    ... 

И так далее. Я пытаюсь получить эти данные в следующий формат:

devicename deviceinfo testtype1 testtype2 testtype3 
device1name device1info meas_1  meas_1  meas_1 
device1name device1info meas_2  meas_2  meas_2 
device1name device1info meas_3  meas_3  meas_3 
...   ...   ...   ...   ... 
device1name device1info meas_n  meas_n  meas_n 
device2name device2info meas_1  meas_1  meas_1 
device2name device2info meas_2  meas_2  meas_2 
...   ...   ...   ...   ... 

Я прочитал файл, используя pd.read_csv(filename), но как только у меня есть данные, которые я застреваю. Я посмотрел на использование df.pivot, а также транспонирование среза данных с помощью измерений, однако я понятия не имею, куда идти отсюда. Я очень новичок в Python, поэтому любая помощь будет высоко оценена!

ответ

0

Сводная таблица будет правильным способом для этого - начните медленно, а затем добавьте сложность.

От взгляда данных

new_df = pd.pivot_table(orig_dataframe,index=['device1name','device1info'],values=['Col1','Col2']) 

Если после этого вы хотели сделать некоторые Numpy математики звонков вы добавить

,aggfunc=[np.sum,len] 

К pivot_table вызова

+0

Я пытаюсь для использования функции 'pd.pivot_table()', но она принимает среднее значение каждого из измерений «meas_n» из разных тестов. То, что я хочу сделать, это создать новую строку для каждого параметра «meas_n», с столбцами для '' devicename '' и '' deviceinfo '', заполненными соответствующим образом, подобно формату базы данных SQL. Не похоже, что для этого есть что-то построенное? – Keegan

+0

Я решил решить эту проблему, перейдя через каждую строку, используя string.split() для данных и записывая это в объект StringIO в том формате, который я хотел. Затем я передал это read_csv() и получил данные в нужном формате. – Keegan

Смежные вопросы