我有两个数据帧,我使用函数str.contains来查看是否可以在另一个数据帧中找到列的值。
for i in range(len(ingName)):
ingName[i]
#check if the string contains IngName ignoring uppercase, ignoring substrings
df_grocery[df_grocery['[SUB CATEGORY]'].str.contains(ingName[i], case=False)]
df_grocery['IngredientName'] = ingName[i]
df_grocery['IngredientID'] = ingID[i]
如果我指定行号,一切正常,但如果我尝试遍历ingName[i]
中的所有名称,则会返回错误消息
"TypeError: first argument must be string or compiled pattern"
如果我这样做,它只返回数组中的最后一个元素?
df_grocery[df_grocery['[SUB CATEGORY]'].str.contains(ingName[i], case=False)]
df_grocery['IngredientName'] = ingName[i]
df_grocery['IngredientID'] = ingID[i]
这与我的csv文件的保存方式有什么关系,或者我是如何尝试实现此目的的?
控制台也打印出来
246 if not sre_compile.isstring(pattern):
-->247 raise TypeError, "first argument must be string or compiled pattern"
248 try:
249 p = sre_compile.compile(pattern, flags)
谢谢,我们将不胜感激。
Hey @Tammy, let me try to explain what i am trying to achieve again
A B
1 Rice
2 Choco
A B
rice with no calries 22222
rice with calories 22222
Milk 22212
what i am trying to do is have
A B c d
rice with no calries 22222 1 Rice
rice with calories 22222 1 Rice
我可以使用我的第一个函数来实现这一点,但是当我尝试迭代第一个数据帧中的所有ID时会出现问题。
df_grocery = df_grocery[df_grocery['[SUB CATEGORY]'].str.contains(str(ingName[i]), case=False)]
df_grocery['IngredientName'] = ingName[i]
df_grocery['IngredientID'] = ingID[i]
df_grocery.to_csv("ingred.csv", mode = 'a', encoding='utf-8', header=None)
这是有效的代码,必须将str添加到ingName,它可以工作,虽然目前只能写出List中的第一个元素。但这几乎可以满足我所需要的一切。
答案 0 :(得分:0)
理想情况下,您可以使用以下内容:
for i in xrange(len(ingName)):
print ingName[i]
# checks the value of the current element in ingName is present in Sub category.
indx = df_grocery[df_grocery['[SUB CATEGORY]'] == ingName[i]].index
# for the rows returned update, the ingredient name and id
for row in indx:
df_grocery.loc[row,'IngredientName'] = ingName[i]
df_grocery.loc[row,'IngredientID'] = ingID[i]
else:
print "Element missing"