【问题标题】:Pandas Update Dataframe with other Dataframe [duplicate]熊猫用其他数据框更新数据框[重复]
【发布时间】:2019-06-16 04:28:46
【问题描述】:

我正在尝试使用第二个 csv 文件中的数据修改 csv 文件。这两个文件都有一个 sku 列,但它们并不完全匹配。这两个文件还有一个价格列。我需要使用与 sku 匹配的第二个文件中的新价格更新第一个文件。感觉很简单,但是今天我的大脑缺了一个齿轮。

到目前为止,我有:

oldDf = pandas.read_csv('oldData.csv')
newDf = pandas.read_csv('newData.csv')

oldDf = oldDf.assign(newPrice = oldDf['LIST PRICE'])
oldDf['newPrice'] = newDf['LIST PRICE']

oldDf = oldDf.assign(sku2 = oldDf['SKU'])
oldDf['sku2'] = newDf['SKU']


print(oldDf)
oldDf.to_csv('something.csv')

除了添加新列并向我显示未排列的内容之外,这并没有做任何事情。

我需要类似的东西:

if(old['sku'] = new['sku']){
    old['list price'] = new['list price']
}

(请原谅语法错误的伪代码)

【问题讨论】:

  • @Chris 第二个不被接受的答案可能是我需要的。谢谢

标签: python pandas csv numpy


【解决方案1】:

在“SKU”上合并您的数据框。这些方面的东西应该可以工作:

oldDf = pandas.read_csv('oldData.csv')
newDf = pandas.read_csv('newData.csv')

result = pd.merge(oldDf, newDf, on='SKU')

【讨论】:

  • 我之前尝试过类似的方法。我想如果我只是删除/重命名我需要的所有列,那会有效。
  • 没错,你需要重命名。
【解决方案2】:

你可以像这样遍历old

for index, row in old.copy().iterrows():
    if old['sku'] == new['sku']:
        old.loc[index, 'list price'] = new.loc[index, 'list price']

编辑:也许我们不应该更新我们迭代的 df,但它应该可以工作。 如果没有,解决方法是添加copy()

【讨论】:

  • 我在这个网站的其他地方看到你不应该通过 iterrows 更新数据帧
  • 我相信,在这种情况下,只要我们不编辑尚未迭代的行,也不将任何行附加到“旧”datafrane,这并不重要。
猜你喜欢
  • 2017-01-14
  • 1970-01-01
  • 2019-12-09
  • 2017-09-09
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多