df1 看起来像这样:
name age
1 Bobby 17
2 Sally 23
3 John 19
df2 看起来像这样:
name city state
1 Bobby Lakeside MN
2 Sally Carlstown MS
3 John Wallsburg UT
我循环遍历DataFrame,df1,如下所示:
for row in df1.itertuples(name='Pandas', index=True):
name = getattr(row, "name")
print(type(name))
print(name)
我会得到(正如预期的那样):
<type 'str'>
Bobby
<type 'str'>
Sally
<type 'str'>
John
然后我搜索第二个数据帧df2,并获取它的行位置(索引)号,这样我就可以获得更多信息。
i = df2[(df2['name'] == "Bobby").index.item()
i
现在是整数...像冠军一样工作。它在其他DataFrame,df2和walla中找到了Bobby!给我索引号。
然而...... 如果我尝试将硬编码字符串“Bobby”换成这样的变量......
for row in df1.itertuples(name='Pandas', index=True):
name = getattr(row, "name")
i = df2[(df2['name'] == name)].index.item()
然后爆炸并死亡。
for row in df1.itertuples(name='Pandas', index=True):
name = getattr(row, "name")
i = df2[(df2['name'] == str(name))].index.item()
我得到以下异常:
ValueError: can only convert an array of size 1 to a Python scalar
我完全失去了帮助!谢谢!
答案 0 :(得分:1)
你的逻辑似乎过于复杂。您可以为(\S)(\()
创建一个名为年龄映射的名称,并迭代df1
。除非您重复使用名称,否则无需访问索引。在后一种情况下,您可以使用索引。
df2.iterrows