

初心者で質問の仕方が悪いかもしれませんがよろしくお願いいたします。

csvファイルをPythonで特定の列だけ結合したいです。1枚目のスクショのように「姓」と「名」のセルが分かれていますが、2枚目のように「姓名」のように結合させてその下のセルも自動で結合する方法を教えていただきたいです。  
スクショは2行しかないですが、何十行、何百行も増えるので自動で姓と名をくっつけてくれるやり方を教えていただけたら幸いです。

結合後の姓と名の間は半角でも全角でもどちらでも大丈夫です。

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

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

[code]

    import pandas as pd
    df = pd.read_csv('./offerlist.csv', encoding='cp932')
    df2 = df[["メールアドレス", "姓", "名", "住所"]]
    print(df2)
    df2.to_csv('./output.csv',header=True,index=False)
    
[/code]

よろしくお願いいたします！


CC BY-SA 4.0
2023-03-27T08:54:44.037
94343
2023-03-28T03:00:56.617
2023-03-28T03:00:56.617
57710
57710
question
python csv
Pythonでcsvファイル内の特定の列だけ結合がしたい


以下のように単純に列を足しあわせればよいと思います。

[code]

    import pandas as pd
    
    df = pd.DataFrame({'メール':['a@example.com','b@example.com'],'姓':['tanaka','sato'],'名':['taro','hanako'],'値':[1,2]})
    df['姓名'] = df['姓'] + ' ' + df['名']
    df = df[['メール','姓名','値']]
    print(df)
    #             メール           姓名  値
    #0  a@example.com  tanaka taro  1
    #1  b@example.com  sato hanako  2
    
[/code]


CC BY-SA 4.0
2023-03-27T09:05:39.940
94344
2023-03-27T09:05:39.940
25830
94343
answer


Excelでセル結合するには`merge_cells`を使います。  
セル結合したセルには左端のセルの内容が設定されますので、結合前のセルの内容を取っておいて、セル結合したセルに結合した内容を設定する必要があります。

[code]

    import openpyxl
    
    wb = openpyxl.load_workbook('セル結合前.xlsx')
    ws = wb['Sheet1']
    for row in ws.iter_rows():
        v1 = row[1].value   #結合前のB列の値
        v2 = row[2].value   #結合前のC列の値
        row_no = str(row[0].row)    #行番号
        cells = 'B' + row_no + ':' + 'C' + row_no
        ws.merge_cells(cells)   #セル結合
        row[1].value = v1 + ' ' + v2    #セル結合したセルに結合した値を書き戻す
    wb.save('セル結合後.xlsx')
    
[/code]


CC BY-SA 4.0
2023-03-27T11:38:56.580
94345
2023-03-27T12:35:45.090
2023-03-27T12:35:45.090
35558
35558
94343
answer