代码之家  ›  专栏  ›  技术社区  ›  Sachin Myneni

无法在pandas dataframe的2列上执行和操作

  •  0
  • Sachin Myneni  · 技术社区  · 7 年前

    我试图查找包含特定项的非空值的行。Item\u Weight(float)和Item\u Identifier(str)都来自数据帧的不同列。

    下面是生成DF的代码:

    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame()
    np.random.seed(seed=6)
    df['col0']=np.random.randn(100)
    lett=['a','b','c','d']
    df['col1']=np.random.choice(lett,100)
    toz = np.random.randint(0,100,15)
    #Randomly set some values of col0 to null.
    df.loc[toz,'col0']=np.NaN
    df.loc[df.loc[df['col0'].isnull()==False] & df.loc[df['col1']=='b']]
    

    抛出类型错误:

    TypeError:输入类型不支持ufunc“bitwise\u and”,并且 无法将输入安全地强制为任何受支持的类型 根据铸造规则“安全”

    df.loc[(df['col0'].isnull() == False) & (df.loc[df['col1'] == 'b'])]
    

    抛出值错误:

    ValueError:操作数无法与形状一起广播 (56,) (2,)

    相反,如果我查询如下:

    df。loc[(df['col0]。isnull()==False)(&(df.loc[df['col1']=='b'])]
    

    我收到另一个TypeError:

    TypeError:无法在块值不受支持的情况下操作False &的操作数类型:'“布尔”和“浮动”

    我可以分别查询每个部分(col0==Null或col1==“b”)。但我不能使用&对其进行操作。是否有解决方法?我做错了什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Gabriel A    7 年前

    将其更改为:

    df_train_1.loc[ ( ~df_train_1['Item_Weight'].isnull() ) & (df_train_1['Item_Identifier'] == 'FDP10') ]