

pythonのpandasを使用して元のcsvファイルの特定の列（detime）を読み込み、既存のcsvファイルに追記したいと考えております。

default_list_4.csv (元ファイル)

[code]

    x,y,botime,detime,eldid,firev
    -11321.9,-44284,0.923816,1.03909,1298,100
    -11716.1,-46828.7,0.517662,0.642548,230,100
    -13105.5,-42740,1.63526,2.23617,1536,100
    -10864.5,-46901.3,0.997993,1.27049,668,100
    
[/code]

list4.csv （既存ファイル）

[code]

    id,x,y,botime,eldid,firev 
    16286,-11321.9324063,-44284.0379875,0.923815814919117,1298,100.0 
    32609,-11716.0833646,-46828.7497757,0.5176622727084385,230,100.0 
    48749,-13105.5019372,-42739.9637287,1.6352609581970237,1536,100.0 
    32073,-10864.5266589,-46901.3089472,0.997993476798066,668,100.0 
    
[/code]

[code]

    import pandas as pd
    
    df = pd.read_csv("default_list_4.csv",usecols=[3])
    df1 = pd.read_csv("list4.csv")
    
    df.to_csv(df1,index=False)
    
[/code]

上記を実行したところ、既存のcsvファイルの中身が削除され、元のcsvファイルの３列目のみがcsvファイルに出力されてしまいます。  
既存のcsvファイルのデータを残しつつ、既存ファイルのbotimeの右列にdefault_list_4.csvのdetimeを追記するにはどのように変更したらよいでしょうか。  
よろしくお願いいたします。


CC BY-SA 4.0
2019-11-12T05:17:03.100
60438
2020-08-28T08:04:10.560
2019-11-12T14:57:27.030
36305
question
python pandas csv
pythonのpandasを使用したcsvデータの列の追加


こちらの記事を参考に。 両方のCSVデータの行の順番は同じであることが前提です。  
[pandas.DataFrameに列や行を追加（assign, appendなど）](https://note.nkmk.me/python-
pandas-assign-append/)  
[pandas.DataFrameの列の順序を入れ替える](https://mk-55.hatenablog.com/entry/2018/12/09/223000)

ただし浮動小数点数はpandasの変換で小数点以下7桁以下など細かい値が違う場合があるので、すべて文字列として扱うことにしてみました。

[code]

    import pandas as pd
    
    dfadd = pd.read_csv("default_list_4.csv", dtype=str,usecols=[3]) # すべて文字列
    dforg = pd.read_csv("list4.csv", dtype=str)                      # すべて文字列
    
    dfnew = pd.concat([dforg,dfadd], axis=1)                    # この行で両DataFrameを横に連結
    dfnew = dfnew[['id','x','y','botime','detime','eldid','firev']] # この行で列の並びを入れ替え
    
    dfnew.to_csv("list4.csv", index=False)
    
[/code]

しかしこのくらいのことだと、質問の要求事項である pandas は使いませんが、モジュール読み込み処理が軽い分こちらでも良さそうです。

[code]

    import csv
    
    with open('default_list_4.csv') as f:
        reader = csv.reader(f)
        csvadd = [row[3] for row in reader]
    
    with open('list4.csv') as f:
        reader = csv.reader(f)
        csvorg = [row for row in reader]
    
    csvnew = []
    for org, add in zip(csvorg, csvadd):
        org.insert(4, add)
        csvnew.append(org)
    
    with open('list4.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerows(csvnew)
    
[/code]

あとは、既に処理済みのファイルに再度処理を掛けないようにチェックを入れておいた方が良いでしょうね。


CC BY-SA 4.0
2019-11-12T10:53:26.573
60455
2019-11-13T00:22:10.063
2019-11-13T00:22:10.063
26370
26370
60438
answer