当尝试切片熊猫数据框时,它引发“ ValueError('长度必须匹配才能进行比较')”

时间:2019-05-17 10:56:14

标签: python pandas scikit-learn pandas-groupby grid-search

我有一个名为df的大熊猫数据框,其列为“功能”,“ k”,“ r2”。最后两列均包含数字,第一行包含列表字符串(例如“ [Preop SC,Preop CC] “)。
我想将数据帧切成较小的数据帧。使用嵌套循环,每个“功能”-“ k”组合都有一个数据框。

不幸的是,它抛出了ValueError: Lengths must match to compare

我也尝试了不同的切片方法来生成z:df[df["Features"]==feat]df.iloc。由于当我打印功能部件时,将显示[“ 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 :(得分:0)

使用.apply方法将列表转换为字符串,即可使用.groupby:

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