我有一个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 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
答案 0 :(得分:1)
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