72801


Pythonで既存のcsvにヘッダーの追加と列名の順番変更を行いたいです。  
データ毎回不定期に変わります。下記の①〜③条件で変わります。

[code]

    ①既存のCSV　順番の変更
    A       B      C    D    　E　  F        
    test1 test2 test3 test5 test4 test6
    
    ②既存のCSV　D,Fの列がない時　　　　　　
    A       B      C    E            
    test1 test2 test3 test4 
    
    ③既存のCSV E列がない時と順番が違う時
    A       B     C      F      D  
    test1 test2 test3 test6 　test5
    
[/code]

こちらコードを作成しましたがヘッダーを追加すると既存の列のデータが消えてしまいます。  
※ないときだけヘッダーを追加します。  
ヘッダー を追加する際に列のデータが消えないようにどうしたらよろしいでしょうか。  
また、最初の列に”0”が付きます。”0”が付かないようにどのようにすればよろしいでしょうか。

[code]

    import pandas as pd # pandasをpdとしてインポート
     
    # データをdfに読み込み。
    df = pd.read_csv("\\Users\\Desktop\\test.csv")
    
    # 列の追加
    df = df[['A','B','C','D','E','F']]
    
    # 順番を変更
    df['D'] = ''
    df['E'] = ''
    df['F'] = ''
    print(df)
    
    df.to_csv("\\Users\\Desktop\\test1.csv")
    #print(df)
    
[/code]

現在の実行結果

[code]

          A     B      C D E F
    0  test  tes2  test3
    
[/code]

どなたか分かる方がいれば教えていただきたいです。  
お手数ですが、よろしくお願いします。


CC BY-SA 4.0
2020-12-21T06:54:01.400
72790
2020-12-21T10:54:36.827
2020-12-21T08:29:16.033
3060
18859
question
python pandas csv
CSV ヘッダーの追加と列名の順番変更について


下記dfをサンプルとします。

[code]

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(np.random.randn(18).reshape(-1,6))
    print(df)
    #   0   1   2   3   4   5
    #0  -0.021010   0.081681    0.328082    0.616223    0.036896    -0.452351
    #1  0.523241    -0.925194   -0.332328   0.973592    0.541788    -0.861261
    #2  -0.848678   -0.572776   0.420053    -1.872105   -0.819465   -1.303716
    
[/code]

> ヘッダー を追加する際に列のデータが消えないようにどうしたらよろしいでしょうか。

ヘッダーの追加は下記のようなコードとなります。

[code]

    df.columns = ['A','B','C','D','E','F']
    print(df)
    #   A   B   C   D   E   F
    #0  -0.021010   0.081681    0.328082    0.616223    0.036896    -0.452351
    #1  0.523241    -0.925194   -0.332328   0.973592    0.541788    -0.861261
    #2  -0.848678   -0.572776   0.420053    -1.872105   -0.819465   -1.303716
    
[/code]

> 列名の順番変更を行いたいです。

列名の順番変更は下記のようなコードとなります。

[code]

    df = df.reindex(columns=['B','C','A','D','F','E'])
    print(df)
    #   B   C   A   D   F   E
    #0  0.081681    0.328082    -0.021010   0.616223    -0.452351   0.036896
    #1  -0.925194   -0.332328   0.523241    0.973592    -0.861261   0.541788
    #2  -0.572776   0.420053    -0.848678   -1.872105   -1.303716   -0.819465
    
[/code]

> また、最初の列に”0”が付きます。

indexと呼ばれるものです。不要であればCSV出力する際に下記のようなコードにしましょう。

[code]

    df.to_csv("\\Users\\Desktop\\test1.csv", index=False)
    
[/code]


CC BY-SA 4.0
2020-12-21T10:54:36.827
72801
2020-12-21T10:54:36.827
39819
72790
answer