52686


pandasのデータフレームで下記のようなデータを

[code]

    import numpy as np
    import pandas as pd
    np.random.seed(1)
    df = pd.DataFrame(np.random.rand(2, 3))
    print(df)
    
              0         1         2
    0  0.417022  0.720324  0.000114
    1  0.302333  0.146756  0.092339
    
[/code]

下記のように出力したいのですが

[code]

    [0, 0] 0.417022
    [0, 1] 0.302333
    [1, 0] 0.720324
    [1, 1] 0.146756
    [2, 0] 0.000114
    [2, 1] 0.092339
    
[/code]

良い方法ありますでしょうか？

一応下記の様にすると出力可能となりますが余分なスペースが入ります  
より良い方法があれば教えてください

[code]

    df.columns = ["[{0}".format(x) for x in range(df.shape[1])]
    df.index = [", {0}]".format(x) for x in range(df.shape[0])]
    df.unstack().reset_index().to_csv('test.csv', sep=' ', index=False, header=False, quotechar=' ')
    
[/code]

どうぞよろしくお願いいたします


CC BY-SA 4.0
2019-02-09T12:01:24.520
52663
2019-02-10T16:07:00.760
28279
question
python pandas
pandasのdataframeのファイルへの出力

[code]

    import numpy as np
    import pandas as pd
    np.random.seed(1)
    df = pd.DataFrame(np.random.rand(2, 3))
    
    output_list = []
    for i in range(len(df.columns)):
        for j in range(len(df)):
            print([i, j], round(df.iloc[:, i][j], 6))
            output_list.append(([i, j], df.iloc[:, i][j]))
    
    output_df = pd.DataFrame(output_list)
    output_df.to_csv('test.csv', index=False)
    
    # 読み出し
    read_df = pd.read_csv('test.csv')
    for i in range(len(read_df)):
        print(read_df.iloc[i][0], round(read_df.iloc[i][1],6))
    
[/code]

こんな感じでどうでしょうか？


CC BY-SA 4.0
2019-02-10T12:35:20.810
52683
2019-02-10T12:35:20.810
32123
52663
answer


リスト内の, の後ろのスペースが不要ならば

[code]

    import pandas as pd
    import numpy as np
    import csv
    
    df = pd.DataFrame(np.random.rand(2, 3))
    df = df.unstack()
    df.index = df.index.to_series().apply(lambda d:'[{},{}]'.format(*d))
    df.to_frame().to_csv('out1.csv', header=None, sep=' ', quoting=csv.QUOTE_NONE)
    
[/code]

でいけます。  
リスト内の, の後ろのスペースも必要ならば

[code]

    import pandas as pd
    import numpy as np
    import csv
    
    df = pd.DataFrame(np.random.rand(2, 3))
    df = df.unstack().reset_index()
    df['level_0'] = '['+df['level_0'].astype(str)+','
    df['level_1'] = df['level_1'].astype(str)+']'
    df.to_csv('out2.csv', header=None, index=None, sep=' ', quoting=csv.QUOTE_NONE)
    
[/code]

でどうでしょうか。（かなり無理やりですが。。）


CC BY-SA 4.0
2019-02-10T16:07:00.760
52686
2019-02-10T16:07:00.760
24801
52663
answer