Python ValueError:。使用a.empty、a.bool()、a.item()、a.any()或a.all()。调用函数时

Python ValueError:。使用a.empty、a.bool()、a.item()、a.any()或a.all()。调用函数时,python,pandas,dataframe,Python,Pandas,Dataframe,我使用CSV文件作为输入,并生成JSON格式的文件以输入kafka主题 df = pd.read_csv(csv_file, delimiter=",", dtype={'E': 'S10', 'C': 'S10', 'Date': 'S10', 'TimeCode': 'S10', 'Workrule': 'S10'}) common.time_calc(df) #time_calc is the func

我使用CSV文件作为输入,并生成JSON格式的文件以输入kafka主题

df = pd.read_csv(csv_file, delimiter=",",
                 dtype={'E': 'S10', 'C': 'S10', 'Date': 'S10', 'TimeCode': 'S10', 
                         'Workrule': 'S10'})

common.time_calc(df) #time_calc is the function from a
df = df.drop(['Workrule'], axis=1)
关于我的函数

def time_calc(df_entry):
    if (df_entry['TimeCode'] == 'R') and (df_entry['Workrule'] == 'C'):
        df_entry['TimeCode'] = 'A'
    if df_entry['TimeCode'] in ['O', 'L']:
        df_entry['TimeCode'] = 'O'
我越来越

ValueError:序列的真值不明确。使用a.empty, a、 bool()、a.item()、a.any()或a.all()


我已经尝试过修改代码,如下所示

if (df_entry['TimeCode'] == 'R') & (df_entry['Workrule'] == 'C'):
        df_entry['TimeCode'] = 'A'
但仍然会得到相同的错误

添加了以下内容,现在可以发布了。谢谢

json_data = df.to_json(orient='records')
json_input = '{"value":' + json_data + '}'
decodedJson = json.loads(json_input) 
for entry in decodedJson['value']:
 common.time_calc(entry)
 del entry['Workrule']

函数
time\u calc
DataFrame
作为参数。在部分
df_条目['TimeCode']='R'
中,当您将整个列与标量值进行比较时,您实际上计算了一个序列

当您使用逻辑
进行此操作时,python会尝试计算一个系列的
布尔值
等价物,这会引发异常。实际上,您要做的是使用向量运算或在行上循环

固定代码的示例可以是(未测试):


您将整个列与单个值进行比较
df_条目['TimeCode']=='R'
。您需要逐行迭代以比较单列值,或者更好地使用
np.where

def time_calc(df_entry):
    df_entry['TimeCode'] = np.where((df_entry['TimeCode'] == 'R') and (df_entry['Workrule'] == 'C'), 'A', df_entry['TimeCode'])
    df_entry['TimeCode'] = np.where(df_entry['TimeCode'] in ['O','L'], 'O', df_entry['TimeCode'])

是的,我检查了现有的问题。这就是为什么我在postingOK之前首先尝试布尔运算符,只是检查一下,在你的问题中没有提到它。我尝试过将代码修改为。。。。。
def time_calc(df_entry):
    df_entry['TimeCode'] = np.where((df_entry['TimeCode'] == 'R') and (df_entry['Workrule'] == 'C'), 'A', df_entry['TimeCode'])
    df_entry['TimeCode'] = np.where(df_entry['TimeCode'] in ['O','L'], 'O', df_entry['TimeCode'])