1

Python の学習を始めたばかりで、インターンシップで依頼されたスクリプトについて助けが必要です。

csv ファイル (sheet1.csv) があり、互いに対応するヘッダー referenceID と PartNumber を持つ 2 つの列のみからデータを抽出する必要があります。また、2 つの列 referenceID と PartNumber を含む sheet2.csv という別の csv ファイルを更新する必要がありますが、PartNumber セルの多くは空です。

基本的に、「PartNumber」フィールドにシート 1 の値を入力する必要があります。私が行った調査から、辞書を使用することは、このスクリプトを作成するための確実なアプローチであると判断しました (私はそう思います)。これまでのところ、ファイルを読み取って、参照 ID をキーとし、PartNumber を値として 2 つの辞書を作成することができました。辞書がどのように見えるかの例を次に示します。

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'}

2 つの辞書を比較し、b-dict の欠損値を入力/上書きしてから、sheet2 に書き込むにはどうすればよいですか? 確かに、私が思いついたよりも効率的な方法があるはずですが、私は Python を使用したことがないので、私の哀れな試みを許してください!

4

1 に答える 1

0

パンダライブラリを見てください。

import padas as pd

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

testdata として定義した 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'}
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')
于 2012-11-29T23:28:20.187 に答える