不能对2列pandas数据帧进行AND操作

时间:2018-01-04 20:46:27

标签: python pandas dataframe

我正在尝试查找包含特定项目的非空值的行。 Item_Weight(float)和Item_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:

  

TypeError:输入类型不支持ufunc'bitwise_and',和   输入无法安全地强制转换为任何支持的类型   根据施法规则''安全''

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

抛出ValueError:

  

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

相反,如果我查询:

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

我得到另一个TypeError:

  

TypeError:在不支持块值的情况下无法操作False   &amp ;:'bool'和'float'的操作数类型

我能够分别查询每个部分(col0 == Null或col1 =='b')。但我不能使用&操作他们。有解决方法吗?我做错了什么?

1 个答案:

答案 0 :(得分:1)

将其更改为:

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