74097


やりたいこと：  
csvファイルのデータを抽出したデータを１カラム・１行ずつでループさせてSFにインポートしたいです。  
下記のコードで試してみましたがエラーが表示されます。  
Json形式でデータをインポートしますので、抽出したデータを１カラム・１行ずつでループさせてSFにインポートする方法ありますでしょうか。

CSVのデータ

[code]

    A       B     C         D
    アメリカ 1234  テキサス 　 @gmail.com
    カナダ　 1234　バンクーバー @gmail.com
    
[/code]

CSVのデータ（カンマ区切り）

[code]

    A,B,C,D
    アメリカ,1234,テキサス,@gmail.com
    カナダ,1234,バンクーバー,@gmail.com
    
[/code]

JSON形式でインポート

[code]

    #sf.Contact.upsert('customExtIdField__c/11999',{'LastName': 'Smith','Email': 'smith@example.com'})
    
[/code]

コード

[code]

    from simple_salesforce import Salesforce
    import json
    import requests
    import pandas as pd
    
    df1 = pd.read_csv('test.csv',encoding='utf_8_sig',header=0)
    
    df_a = df1[["B"]] 
    print(df_a) 
    
    df_b = df1[["C"]] 
    print(df_b)
    
    df_c = df1[["D"]] 
    print(df_c)
    
    SALESFORCE_USERNAME = '123'
    PASSWORD = '123'
    SECURITY_TOKEN = '123'
    
    # Authentication settings
    sf = Salesforce(username=SALESFORCE_USERNAME,
    password=PASSWORD,
    security_token=SECURITY_TOKEN)
    
    #JSON形式でSFにインポートする方法です。→https://github.com/simple-salesforce/simple-salesforce
    #Other Optionsを参考
    
    #sf.Contact.upsert('customExtIdField__c/11999',{'LastName': 'Smith','Email': 'smith@example.com'})
    
    #SFにインポートするコード
    # for j in range(len(df_i)):→抽出したデータを１カラム・１行ずつでループさせてSFにインポートしたい！
     sf.Contact.upsert('Test__c/'str(df_a),{'Test2__c':str(df_b),'Email':str(df_c)})
    
    
[/code]

エラー内容

[code]

    S C:\Users\test\Documents\salesforce> & C:/Users/test/AppData/Local/Programs/Python/Python39/python.exe c:/Users/test/Documents/salesforce/check.py
      File "c:\Users\test\Documents\salesforce\check.py", line 36
        sf.Contact.upsert('Test__c/'str(df_a),{'Test2__c':str(df_b),'Email':str(df_c)})
    
                                  ^
    SyntaxError: invalid syntax
    
[/code]

わかる方いらっしゃいましたらご教示願います。  
お手数ですが、宜しくお願いいたします。


CC BY-SA 4.0
2021-02-18T02:29:51.577
74090
2021-02-18T09:50:13.613
2021-02-18T08:57:40.897
18859
18859
question
python csv
CSVファイルのデータからJSON 形式のフォーマットでSFへインポート

[code]

    #!/usr/bin/env python3
    #-*- coding: utf-8 -*-↲
    
    from simple_salesforce import Salesforce
    from simple_salesforce import format_soql, format_external_id
    
    import json
    import requests
    import pandas as pd
    
    df1 = pd.read_csv('test.csv',encoding='utf_8_sig')
    
    #一行ずつ
    for index, item in df1.iterrows():
        # print(item['A'], item['B'], item['C'], item['D'])
        external_id = format_external_id('Test_c', item['A'])
        i = external_id, {'Test2__c': item['C'],'Email': item['D']}
        #出力して確認
        print(i)
    
[/code]


CC BY-SA 4.0
2021-02-18T05:50:24.210
74096
2021-02-18T09:50:13.613
2021-02-18T09:50:13.613
43957
43957
74090
answer


前回の
[PythonでCSVファイルのデータを抽出、全ての列空白を除外](https://ja.stackoverflow.com/questions/74034/)
で回答した様に、`pandas.DataFrame.agg` を使う方法もあります。

[code]

    import pandas as pd
    
    Result = pd.read_csv('test.csv',
               usecols=['B', 'C', 'D'], dtype=str, encoding='utf_8_sig')\
             .agg(lambda x: ('Test__c/'+x[0], {'Test2__c':x[1], 'Email':x[2]}), axis=1)
    
    for r in Result:
      print(*r)
    =>
    Test__c/1234 {'Test2__c': 'テキサス', 'Email': '@gmail.com'}
    Test__c/1234 {'Test2__c': 'バンクーバー', 'Email': '@gmail.com'}
    
[/code]


CC BY-SA 4.0
2021-02-18T06:46:17.593
74097
2021-02-18T06:56:15.310
2021-02-18T06:56:15.310
74090
answer