我正在使用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.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']
答案 0 :(得分:0)
您的函数time_calc
以DataFrame
作为参数。在df_entry['TimeCode'] == 'R'
部分中,您实际上是在将整列与标量值进行比较时计算出一个序列。
对此使用逻辑and
时,python会尝试计算与Series等效的boolean
,这会引发异常。您实际上打算做的是使用向量运算或在行上循环。
可以(不经过测试)固定代码的示例:
def time_calc(df):
df.loc[df['TimeCode'] == 'R' & df['Workrule'] == 'C', 'TimeCode'] = 'A'
df.loc[df['TimeCode'].isin(['O', 'L']), 'TimeCode'] = 'O'
答案 1 :(得分:0)
您正在将整个列与单个值df_entry['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'])