

1枚目の写真のcsvファイルであれば「メールアドレス」「姓」「名」「住所」だけを抽出して、さらに2枚目の写真のように「姓」と「名」の列のセルを結合して表示させたいと思っています。  
写真では2行ですがもっと増えていくので、行が増えればcsvファイルで自動で特定の列を抽出して、特定のセルも結合して表示させる方法を教えていただきたいです。

[![変更前](https://i.stack.imgur.com/1WXzR.png)](https://i.stack.imgur.com/1WXzR.png)

[![変更後](https://i.stack.imgur.com/S9S0b.png)](https://i.stack.imgur.com/S9S0b.png)


CC BY-SA 4.0
2023-03-28T03:34:52.233
94350
2023-03-28T10:12:18.230
2023-03-28T04:01:08.937
57710
57710
question
python csv
csvファイルをPythonで特定の列だけを抽出して、さらに抽出した列の中で特定の列だけセル結合したい


Polarsライブラリー使う方法

[code]

    import polars as pl
    import io
    csv_file = io.StringIO('''
    メール,姓,名,出身地,住所
    a@example.com,tanaka,taro,北海道,東京都1-1-1
    b@example.com,sato,hanako,大阪府,神奈川県1-1-2
    c@example.com,takahasi,jiro,大阪府,千葉県1-1-3
    d@example.com,cat,tama,,埼玉県1-1-4
    e@example.com,dog,pochi,,茨城県1-1-5
    ''')
    
    df = pl.read_csv(csv_file)
    df.select([
        'メール',
        (pl.col('姓') +' ' +pl.col('名')).alias('姓名'),
        '住所',
    ]).write_csv()
    
    # メール,姓名,住所
    # a@example.com,tanaka taro,東京都1-1-1
    # b@example.com,sato hanako,神奈川県1-1-2
    # c@example.com,takahasi jiro,千葉県1-1-3
    # d@example.com,cat tama,埼玉県1-1-4
    # e@example.com,dog pochi,茨城県1-1-5
    
[/code]


CC BY-SA 4.0
2023-03-28T05:01:18.787
94352
2023-03-28T05:01:18.787
43025
94350
answer


標準モジュールの[csv](https://docs.python.org/ja/3/library/csv.html)から、[DictReader](https://docs.python.org/ja/3/library/csv.html#csv.DictReader)と[DictWriter](https://docs.python.org/ja/3/library/csv.html#csv.DictWriter)を使う方法です。

**サンプルコード**

[code]

    import csv
    
    # 元ファイルのサンプルファイルを作る場合は"""～"""を下準備として実行する
    """ 
    def create_sample_csv():
        with open("source.csv", "w") as f:
            f.write('''メール,姓,名,出身地,住所
    a@example.com,tanaka,taro,北海道,東京都1-1-1
    b@example.com,sato,hanako,大阪府,神奈川県1-1-2
    c@example.com,takahasi,jiro,大阪府,千葉県1-1-3
    d@example.com,cat,tama,,埼玉県1-1-4
    e@example.com,dog,pochi,,茨城県1-1-5
    ''')
    
    create_sample_csv()
    """ 
    
    # source.csvを読み込んで、必要な列を整形して辞書型のリストに変換する
    dicts = [] # 辞書型のリスト
    with open("source.csv", "r") as f:
        reader = csv.DictReader(f)
        for row in reader:
            # 辞書型の行データ
            dict = {"メール": row["メール"],
                    "姓名": row["姓"] + " " + row["名"],
                    "住所": row["住所"]}
            dicts.append(dict)
    
    # 辞書型のリストを元にresult.csvを出力
    with open("result.csv", "w") as f:
        writer = csv.DictWriter(f, dict.keys(), lineterminator='\n')
        writer.writeheader() # ヘッダ出力
        writer.writerows(dicts) # 行データ出力
    
[/code]


CC BY-SA 4.0
2023-03-28T10:12:18.230
94356
2023-03-28T10:12:18.230
9820
94350
answer