2015-02-25 2 views
1

Я новичок в python pandas. У меня есть CSV файл, как это:Как я могу использовать pandon pandas для разбора CSV в формате, который я хочу?

insectName count weather location time  date  Condition 
    aaa   15  sunny balabala 0900:1200 1990-02-10  25 
    bbb   10  sunny balabala 0900:1200 1990-02-10  25 
    ccc   20  sunny balabala 0900:1200 1990-02-10  25 
    ddd   50  sunny balabala 0900:1200 1990-02-10  25 
    ...  ...  ...  ...  ...   ...  ... 
    XXX   40  sunny balabala 1300:1500 1990-02-15  38 
    yyy   10  sunny balabala 1300:1500 1990-02-15  38 
    yyy   25  sunny balabala 1300:1500 1990-02-15  38 

файл имеет множество данных и insectName в каждый день мог бы повторить. Я хочу перевести использование данных по дате, один день подряд. так:

insectName count insectName count insectName count weather location time  date  Condition 
    ccc   20  bbb  10  aaa  15 sunny balabala 0900:1200 1990-02-10  25 
    yyy   25  yyy  10  XXX  40 sunny balabala 1300:1500 1990-02-15  38 
    ...  ...  ...  ...  ...  ... ...  ...  ...   ...  ...  

Как я мог сделать?

+0

Всегда ли равное количество строк на «дату»? (так что количество столбцов в желаемом результате будет постоянным?) – joris

+0

Да. И единственными изменениями являются «insectName» и «count». –

ответ

0

Существует groupby/cumcount/unstack трюк, который преобразует DataFrames длиной формата в широкоформатных DataFrames:

import pandas as pd 
df = pd.read_table('data', sep='\s+') 

common = ['weather', 'location', 'time', 'date', 'Condition'] 
grouped = df.groupby(common) 
df['idx'] = grouped.cumcount() 
df2 = df.set_index(common+['idx']) 
df2 = df2.unstack('idx') 
df2 = df2.swaplevel(0, 1, axis=1) 
df2 = df2.sortlevel(axis=1) 
df2.columns = df2.columns.droplevel(0) 
df2 = df2.reset_index() 
print(df2) 

Урожайность

weather location  time  date Condition insectName count \ 
0 sunny balabala 0900:1200 1990-02-10   25  aaa  15 
1 sunny balabala 1300:1500 1990-02-15   38  XXX  40 

    insectName count insectName count insectName count 
0  bbb  10  ccc  20  ddd  50 
1  yyy  10  yyy  25  NaN NaN 

Хотя широкоформатная может быть полезно для презентации, обратите внимание, что долго- формат обычно является правильным форматом для обработки данных. См. Hadley Wickham's article on the virtues of tidy data (PDF).

+0

Большое спасибо. И где я должен прочитать мой CSV-файл? –

+0

Изменить 'df = pd.read_table ('data', ...)' to 'df = pd.read_table ('/ path/to/csv', ...)' где '/ path/to/csv' является путь к вашему CSV-файлу. – unutbu

+0

Еще раз спасибо. У меня есть формат, который я хочу. могу ли я записать формат в новый CSV-файл? –

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