【问题标题】:Python: loop index issuePython:循环索引问题
【发布时间】:2021-12-20 15:42:28
【问题描述】:

想法:我想用更新的价格数据替换部分 data1。

Q1:为什么更新了“laptop”和“printer”,但没有更新“chair”?

Q2:data2 中的“床”对于 data1 不存在。在这种情况下,无法更新 data1。我只是想知道为什么没有像“'bed' has no match in data1”这样的错误?

import pandas as pd

data1 =pd.DataFrame({'product_name': ['laptop', 'printer', 'tablet', 'desk', 'chair'],
        'price': [0, 4, 6, 7, 9]
        })
data2 =pd.DataFrame({'product_name': ['laptop', 'printer','chair','bed'],
        'price': [89,32,34,355]
        })

indi = data2['product_name']

for i in indi:
    temp = data2.loc[data2['product_name'] == '%s'%i,'price']
    data1.loc[data1['product_name'] == '%s'%i,'price'] = temp

【问题讨论】:

    标签: python pandas for-loop


    【解决方案1】:

    你需要这样做:(temp.iloc[0])

    for i in indi:
        temp = data2.loc[data2['product_name'] == '%s'%i,'price']
        data1.loc[data1['product_name'] == '%s'%i,'price'] = temp.iloc[0]
    

    【讨论】:

    • 非常感谢!我想了解为什么我必须添加“.iloc[0]。我认为 temp 是一个“数字”。
    • 很高兴它帮助了你!如果你输入 print(temp),你会发现它并不是一个真正的数字。它附有名称和索引。
    • 如果这个答案有用,请点赞。
    • 谢谢!我只是想知道为什么前两个条目的更新工作有效,但最后一个条目却失败了(当数据 2 中有一些条目不在数据 1 中时)。
    【解决方案2】:

    我相信这可能与 chair 条目的不匹配索引有关。当您遍历indi 时,您不仅会从data 获得product_name,还会获得其对应的索引。这是处理此类情况的更好方法:

    In [53]: data1
    Out[53]:
      product_name  price
    0       laptop      0
    1      printer      4
    2       tablet      6
    3         desk      7
    4        chair      9
    
    In [54]: data2
    Out[54]:
      product_name  price
    0       laptop     89
    1      printer     32
    2        chair     34
    3          bed    355
    
    In [55]: for row in data2.itertuples():
        ...:     data1.loc[data1['product_name']==row.product_name, 'price'] = row.price
        ...:
    
    In [56]: data1
    Out[56]:
      product_name  price
    0       laptop     89
    1      printer     32
    2       tablet      6
    3         desk      7
    4        chair     34
    
    In [57]: data2
    Out[57]:
      product_name  price
    0       laptop     89
    1      printer     32
    2        chair     34
    3          bed    355
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-14
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多