При попытке нарезать фрагмент данных pandas он выдает «ValueError (« Длина должна соответствовать для сравнения »)» - PullRequest
0 голосов
/ 17 мая 2019

У меня есть огромный массив данных pandas, называемый df со столбцами «Features», «k», «r2. Последние два столбца содержат числа, а первая строка содержит строки списков (например,« [Preop SC, Preop CC]).").
Я хотел бы разделить информационный кадр на меньшие информационные кадры. Один информационный кадр на каждую комбинацию" Особенности "-" k ", используя вложенные циклы.

К сожалению, это выдает ValueError: Lengths must match to compare.

Я пробовал разные методы нарезки для получения z: df[df["Features"]==feat] и * 1008. * Так как, когда я печатаю объекты, вместо знака кавычки появляется ["Preop SC", "Preop CC"]]бесплатная версия, как указано ниже. Я также попытался удалить их, преобразовав весь элемент в строку, чтобы использовать метод .replace, но безрезультатно. Ничто, похоже, не поможет мне разобраться с функциями. (Это работает только с k)

РЕДАКТИРОВАТЬ: Groupby, кажется, тоже не работает, хотя я тоже новичок в этом Вот код:

    import numpy as np
    import pandas as pd
    features=[['Preop SC', 'Preop CC'], ['Preop CC', 'Postoptag'], ['Preop CC', 
    'Pachy'], ['Preop CC', 'K2']]
    df=[]
    count=1
    execute=1
    while execute<3:
        for i in features:
            r2=np.random.normal()
            df.append([i,count,r2])
            count+=1
        execute+=1
        count=1
    df=pd.DataFrame(df)
    df.columns=["Features","KNeighbors","r2 score"]

    summary=[]                                      #Mean of results by feature-k combination
    for feat in features:
        for k in range(1,5):
            temp=o.loc[(o["Features"]==feat)&(o["KNeighbors"]==k):,]
            summary.append([feat,k,temp["r2 score"].mean()])
    summary=pd.Dataframe(summary)
    print(summary)

~~~~~~~~~~~~~~~~~~~~
This is what df looks like:
                Features  KNeighbors  r2 score
0   [Preop SC, Preop CC]           1  0.880299
1  [Preop CC, Postoptag]           2  0.681024
2      [Preop CC, Pachy]           3 -1.925969
3         [Preop CC, K2]           4  1.132059
4   [Preop SC, Preop CC]           1  0.397732
5  [Preop CC, Postoptag]           2 -0.969017
6      [Preop CC, Pachy]           3 -0.173293
7         [Preop CC, K2]           4  0.277422

this is what summary should look like

0   [Preop SC, Preop CC]           1 0.6390155
1  [Preop CC, Postoptag]           2 -0.1439965 
2      [Preop CC, Pachy]           3 -1.049631
3         [Preop CC, K2]           4  0.7047405

Any tips will be dearly appreciated

1 Ответ

0 голосов
/ 17 мая 2019

Преобразование списков в строку с помощью метода .apply позволяет использовать .groupby:

df["Features"]=df.Features.apply(str)
summary=df.groupby("Features").mean()
print(summary)
...