使用python将特定数据从一个excel文件传输到另一个

我刚开始学习Python,我需要帮助,我的实习要求我写一个脚本。

我有一个csv文件(sheet1.csv),我只需要从两个具有标头referenceID和PartNumber彼此对应的列中提取数据。 我需要更新一个单独的csv文件,名为sheet2.csv,它也包含两列referenceID和PartNumber,但是很多PartNumber单元格都是空的。

基本上我需要使用sheet1中的值填写“PartNumber”字段。 从我所做的研究中,我已经决定使用字典是一个坚实的方法来写这个脚本(我认为)。 到目前为止,我已经能够读取这些文件,并创build两个字典,其中referenceIDs作为关键字,PartNumber作为值。下面是我所展示的词典的例子。

import csv a = open('sheet1.csv', 'rU') b = open('sheet2.csv', 'rU') csvReadera = csv.DictReader(a) csvReaderb = csv.DictReader(b) a_dict = {} b_dict = {} for line in csvReadera: a_dict[line["ReferenceID"]] = line["PartNumber"] print(a_dict) for line in csvReaderb: b_dict[line["ReferenceID"]] = line["PartNumber"] print(b_dict) a_dict = {'R150': 'PN000123', 'R331': 'PN000873', 'C774': 'PN000064', 'L7896': 'PN000447', 'R0640': 'PN000878', 'R454': 'PN000333'} b_dict = {'C774': '', 'R331': '', 'R454': '', 'L7896': 'PN000000', 'R0640': '', 'R150': 'PN000333'} 

我怎样才能比较两个字典,填写/覆盖b-dict的缺失值,然后写入sheet2? 当然,必须有更有效的方法,但我从来没有用过Python,所以请原谅我的可怜尝试!

看看pandas图书馆。

 import padas as pd #this is how you read dfa = pd.read_csv("sheet1.csv") dfb = pd.read_csv("sheet2.csv") 

让我们把你所定义的testing数据作为testing数据

 a_dict = {'R150': 'PN000123', 'R331': 'PN000873', 'C774': 'PN000064', 'L7896': 'PN000447', 'R0640': 'PN000878', 'R454': 'PN000333'} b_dict = {'C774': '', 'R331': '', 'R454': '', 'L7896': 'PN000000', 'R0640': '', 'R150': 'PN000333'} dfar = pd.DataFrame(a_dict.items(), columns = ['ReferenceID', 'PartNumber']) dfbr = pd.DataFrame(b_dict.items(), columns = ['ReferenceID', 'PartNumber']) dfa = dfar[['ReferenceID', 'PartNumber']] dfa.columns = ['ReferenceIDA', 'PartNumberA'] dfb = dfbr[['ReferenceID', 'PartNumber']] dfb.columns = ['ReferenceIDB', 'PartNumberB'] 

你得到这个

  In [97]: dfa Out[97]: ReferenceIDA PartNumberA 0 R331 PN000873 1 R454 PN000333 2 L7896 PN000447 3 R150 PN000123 4 C774 PN000064 5 R0640 PN000878 In [98]: dfb Out[98]: ReferenceIDB PartNumberB 0 R331 1 R454 2 R0640 3 R150 PN000333 4 C774 5 L7896 PN000000 

现在

  In [67]: cd = pd.concat([dfa,dfb], axis=1) In [68]: cd Out[68]: ReferenceIDA PartNumberA ReferenceIDB PartNumberB 0 R331 PN000873 R331 1 R454 PN000333 R454 2 L7896 PN000447 R0640 3 R150 PN000123 R150 PN000333 4 C774 PN000064 C774 5 R0640 PN000878 L7896 PN000000 cd["res"] = cd.apply(lambda x : x["PartNumberB"] if x["PartNumberB"] else x["PartNumberA"], axis=1) cd Out[106]: ReferenceIDA PartNumberA ReferenceIDB PartNumberB res 0 R331 PN000873 R331 PN000873 1 R454 PN000333 R454 PN000333 2 L7896 PN000447 R0640 PN000447 3 R150 PN000123 R150 PN000333 PN000333 4 C774 PN000064 C774 PN000064 5 R0640 PN000878 L7896 PN000000 PN000000 

这是你想要的

只是设置

 dfbr['PartNumber'] = cd['res'] 

并转储到csv

 dfbr.to_csv('sheet2.csv')