将对象转换为字符串类型进行比较

问题描述 投票:0回答:2

我正在读取一个 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)

python pandas string-comparison
2个回答
0
投票

计算是否发现任何行以评估真实性。

if df3[df3['c'] == 'Science'].shape[0]:
    ...

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)
© www.soinside.com 2019 - 2024. All rights reserved.