我正在读取一个 csv 文件并将其内容写入数据框。
df1 = pd.read_csv(r'/C:/Data.csv', sep=',', names=["a", "b", "c"])
稍后我将一列中的数据与不同数据框中的一列进行比较。 代码无法执行,显示错误“(”系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。 , u'发生在索引 0')'。
已经尝试在不同的变体中使用 astype 方法,但到目前为止没有任何效果。 在下面粘贴一段我试过但也没有用的代码。
if (df3[df3['c'] == 'Science']):
感谢是否有人可以帮助我理解问题以解决问题。提前致谢。
添加下面的代码以更好地理解......
df1 = --reading from local(id, student name, class columns)
df2 = --creating this to save the output from the json method(id, subject, marks)
url = --endpoint
def passfail_logic(row):
if ((df3['subject'] == 'viva' & df3['marks'] > 85 ) & (df3['subject'] == 'science' & df3['marks'] > 75) & (df3['subject'] == 'math' & df3['marks'] > 85) ):
res = 'pass'
elif ((df3['subject'] == 'viva' & df3['marks'] > 50 ) & (df3['subject'] == 'science' & df3['marks'] > 45) & (df3['subject'] == 'math' & df3['marks'] > 55)) :
res = 'reattempt'
else:
res = 'fail'
return res
testdata = open('/c:/TestData.csv')
testdataReader = csv.reader(testdata)
testdatalist = list(testdataReader)
for row in testdatalist:
j = "{'id':" + row[0] + ",'student_name':" + row[1] + ",'class':'" + row[2] + "'}"
j = j.replace("'",'"')
j = ast.literal_eval(j)
response = requests.post(url, json=j)
df2 = df2.append(response.json(), ignore_index=True)
df4 = pd.concat([df1, df2], axis=1)
df3['result'] = df3.apply(lambda row : passfail_logic(row ), axis = 1)
df3.to_csv('C:/StudentResult.csv', index=False)
计算是否发现任何行以评估真实性。
if df3[df3['c'] == 'Science'].shape[0]:
...
编辑:这是你更新后的问题:
def passfail_logic(row):
if ((df3['subject'] == 'viva' & ...
df3
应该是row
df3[df3['c'] == 'Science']
所做的基本上是将您的数据框过滤到“c”列为“科学”的任何行。所以你最终得到的是 if([filtered dataframe]) 并且它不知道如何检查该语句的真实性。
我很难提供更多关于做什么的信息,因为我不知道你想用“科学”数据做什么。
如果你只想获取过滤后的数据,那么你可以做类似的事情
filtered_df = df3[df3['c'] == 'Science']
如果你想在该列是科学的地方应用一个函数,你可以做类似的事情
def some_function(value):
if value == 'Science':
return 1
else:
return 0
df3['science'] = df3['c'].apply(some_function)