我有一个csv格式的库存清单文件,如下所示:

sku nome    prezzo  qty codice
1   uno       10    1   11111
2   due       10    1   22222
3   tre       10    1   33333
4   quattro   10    1   44444
5   cinque    10    1   55555
10  dieci     10    1   101010


可以用作键的唯一列是“ sku”。
该文件是更新版本,添加了新的sku,更新了现有的sku并删除了库存中不再存在的sku,如下所示:

sku nome    prezzo  qty codice
  1  uno        20    2  11111
  2  due        20    2  22222
  3  tre        20    2  33333
  5  cinque     20    2  55555
 10  dieci      20    2  101010
 11  undici     20    2  111111


我是python的新手,但是有了pandas模块和2或3行代码,我进行了外部合并:

import pandas as pd

    a = pd.read_csv("./old.csv")
    b = pd.read_csv("./new.csv")

    c = pd.merge(a, b, on = 'sku', how = 'outer', indicator = True)
    c.to_csv("./updated.csv", index=False)


结果是正确的:

sku nome_x  prezzo_x    qty_x   codice _x   nome_y  prezzo_y    qty_y   codice _y   _merge
1   uno 10  1   11111   uno 20  2   11111   both
2   due 10  1   22222   due 20  2   22222   both
3   tre 10  1   33333   tre 20  2   33333   both
4   quattro 10  1   44444                   left_only
5   cinque  10  1   55555   cinque  20  2   55555   both
10  dieci   10  1   101010  dieci   20  2   101010  both
11                  undici  20  2   111111  right_only


但是不是可用的csv ...
我希望我可以有这个:

sku nome    prezzo  qty codice
  1  uno        20  2   11111
  2  due        20  2   22222
  3  tre        20  2   33333
  4  quattro     0  0   44444
  5  cinque     20  2   55555
  10 dieci      20  2   101010
  11 undici     20  2   111111

最佳答案

IIUC:

In [52]: r = b.set_index('sku') \
    ...:       .reindex(pd.Index(a['sku']).union(pd.Index(b['sku']))) \
    ...:       .combine_first(a.set_index('sku').assign(qty=0, prezzo=0)) \
    ...:       .reset_index()
    ...:

In [53]: r[['prezzo','qty','codice']] = r[['prezzo','qty','codice']].astype(int)

In [54]: r
Out[54]:
   sku     nome  prezzo  qty  codice
0    1      uno      20    2   11111
1    2      due      20    2   22222
2    3      tre      20    2   33333
3    4  quattro       0    0   44444
4    5   cinque      20    2   55555
5   10    dieci      20    2  101010
6   11   undici      20    2  111111

关于python - 使用python更新库存库存csv文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47272523/

10-12 22:57