使用pandas交换变量的硬编码字符串时的标量错误

时间:2018-05-21 21:07:32

标签: python pandas dataframe

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

我完全失去了帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

你的逻辑似乎过于复杂。您可以为(\S)(\() 创建一个名为年龄映射的名称,并迭代df1。除非您重复使用名称,否则无需访问索引。在后一种情况下,您可以使用索引。

df2.iterrows