首页 > 解决方案 > Python:循环索引问题

问题描述

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

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

Q2:data2 中的“床”对于 data1 不存在。在这种情况下,无法更新 data1。我只是想知道为什么没有像“'bed'在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

标签: pythonpandasfor-loop

解决方案


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

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


推荐阅读