ошибка при попытке сделать среднее для фрейма данных PANDA - PullRequest
0 голосов
/ 30 июня 2018

У меня есть кадр данных panda из CSV-файла, и мне нужно сделать среднее из 3 столбцов с результатом в новых столбцах. Так выглядят данные -

0      week     12    exp    exp    exp
1   Subject  Group      1      2      3
2       255   HD 0  117.4  104.8   87.0
3       418   WT 0   61.2   56.1   97.9
4       300   HD 0  111.7  126.9  118.4
5       299   HD 0   50.7   37.8   30.6
6       258   WT 0   56.0   67.9   58.5
7       173   HD 0   76.2  131.7  119.5

мой код -

with open('final results.csv', 'r') as frame:
    date_again = csv.reader(frame)   

    frame = []
    for line in date_again:
        frame = frame + [line]
panda_file = pd.DataFrame(frame)  

panda_file ['среднее'] = кадр [3:]. Среднее (ось = 1)

Ошибка, которую я получаю, AttributeError: у объекта 'list' нет атрибута 'mean'

Как я могу решить это?

Спасибо

1 Ответ

0 голосов
/ 30 июня 2018

Сначала для создания DataFrame используйте read_csv с параметром header=[0,1], потому что csv имеет 2 заголовка строки для DataFrame с MultiIndex в столбцах:

import pandas as pd

temp=u"""week,12,exp,exp,exp
Subject,Group,1,2,3
255,HD,0,117.4,104.8,87.0
418,WT,0,61.2,56.1,97.9
300,HD,0,111.7,126.9,118.4
299,HD,0,50.7,37.8,30.6
258,WT,0,56.0,67.9,58.5
173,HD,0,76.2,131.7,119.5"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), header=[0,1])

print (df)
       week    12    exp              
    Subject Group      1      2      3
255      HD     0  117.4  104.8   87.0
418      WT     0   61.2   56.1   97.9
300      HD     0  111.7  126.9  118.4
299      HD     0   50.7   37.8   30.6
258      WT     0   56.0   67.9   58.5
173      HD     0   76.2  131.7  119.5

Затем выберите последние 3 столбца для mean:

df1 = df.iloc[:, -3:].mean(axis=1)
print (df1)
255    103.066667
418     71.733333
300    119.000000
299     39.700000
258     60.800000
173    109.133333
dtype: float64

А для нового столбца нужно присвоить кортежам определенные имена нового столбца MultiIndex:

df[('exp', 'mean')] = df.iloc[:, -3:].mean(axis=1)
print (df)

       week    12    exp                          
    Subject Group      1      2      3        mean
255      HD     0  117.4  104.8   87.0  103.066667
418      WT     0   61.2   56.1   97.9   71.733333
300      HD     0  111.7  126.9  118.4  119.000000
299      HD     0   50.7   37.8   30.6   39.700000
258      WT     0   56.0   67.9   58.5   60.800000
173      HD     0   76.2  131.7  119.5  109.133333

Но для упрощения можно сгладить столбцы:

df.columns = df.columns.map('_'.join)
print (df)
    week_Subject  12_Group  exp_1  exp_2  exp_3
255           HD         0  117.4  104.8   87.0
418           WT         0   61.2   56.1   97.9
300           HD         0  111.7  126.9  118.4
299           HD         0   50.7   37.8   30.6
258           WT         0   56.0   67.9   58.5
173           HD         0   76.2  131.7  119.5

df['exp_mean'] = df.iloc[:, -3:].mean(axis=1)
print (df)
    week_Subject  12_Group  exp_1  exp_2  exp_3    exp_mean
255           HD         0  117.4  104.8   87.0  103.066667
418           WT         0   61.2   56.1   97.9   71.733333
300           HD         0  111.7  126.9  118.4  119.000000
299           HD         0   50.7   37.8   30.6   39.700000
258           WT         0   56.0   67.9   58.5   60.800000
173           HD         0   76.2  131.7  119.5  109.133333
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...