我有一个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/