【问题标题】:during filtering of a pandas dataframe: ValueError: Buffer has wrong number of dimensions (expected 1, got 2)在过滤熊猫数据帧期间:ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
【发布时间】:2021-07-29 12:50:43
【问题描述】:

我不知道这里出了什么问题。

d = {'x' : [1,4,6,9],
     'y' : [1,4,6,8]}
df = pd.DataFrame(d)

#filter columns based on value in specific row
df_VIP = df.iloc[:,df.iloc[1:2,:]<3]

我得到了错误。我的真实数据框也会发生这种情况......

ValueError: 缓冲区的维数错误(预期为 1,得到 2)

我希望任何人都有解决它的提示。谢谢!

【问题讨论】:

    标签: python-3.x pandas valueerror


    【解决方案1】:

    如果可能,按一行选择,例如第二个由1 转换为numpy 数组,因为使用了iloc

    d = {'x' : [1,4,6,9],
         'y' : [1,2,6,8]}
    df = pd.DataFrame(d)
    
    df_VIP = df.iloc[:,df.iloc[1,:].to_numpy()<3]
    print (df_VIP)
       y
    0  1
    1  2
    2  6
    3  8
    

    如果使用您的选择 - 一行 DataFrame 而不是 Series 通过索引来展平值:

    print (df.iloc[1:2,:])
       x  y
    1  4  2
    
    
    print (df.iloc[1:2,:].to_numpy())
    [[4 2]]
    
    print (df.iloc[1:2,:].to_numpy()[0])
    [4 2]
    
    df_VIP = df.iloc[:,df.iloc[1:2,:].to_numpy()[0]<3]
    

    【讨论】:

    • 我明白了。第一个解决方案对我来说很好!如果你有时间,问题出在哪里?谢谢!
    • @MarkusKrohn - 问题是掩码是一行 DataFrame,但总是需要系列(这意味着通常会展平值)
    猜你喜欢
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2018-03-14
    • 2016-05-05
    • 2017-12-23
    相关资源
    最近更新 更多