当尝试对 pandas 数据帧进行切片时,它会引发“ValueError('Lengths must match to compare')”

Posted

技术标签:

【中文标题】当尝试对 pandas 数据帧进行切片时,它会引发“ValueError(\'Lengths must match to compare\')”【英文标题】:When trying to slice a pandas dataframe it raises "ValueError('Lengths must match to compare')"当尝试对 pandas 数据帧进行切片时,它会引发“ValueError('Lengths must match to compare')” 【发布时间】:2019-10-04 16:53:04 【问题描述】:

我有一个名为 df 的大熊猫数据框,其中包含“Features”、“k”、“r2”列。最后两列都包含数字,第一行包含列表字符串(例如“[Preop SC, Preop CC] ")。 我想将数据帧切成更小的数据帧。每个“Features”-“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】:

使用 .apply 方法将列表转换为字符串允许您使用 .groupby:

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

【讨论】:

以上是关于当尝试对 pandas 数据帧进行切片时,它会引发“ValueError('Lengths must match to compare')”的主要内容,如果未能解决你的问题,请参考以下文章

为啥 pandas 多索引数据帧切片看起来不一致?

为啥graphQl在尝试对查询进行切片时返回“字段上的未知参数'first'......”错误?

尝试在 React 中进行排序和切片时,如何保留整个 geojson?

当切片索引超出范围时如何引发 IndexError?

python--pandas切片

pandas chained_assignment 警告异常处理