【问题标题】:Pandas Dataframe to key value pairs and csv formatPandas Dataframe 到键值对和 csv 格式
【发布时间】:2018-08-07 11:05:44
【问题描述】:

我有一个如下所示的数据框。

df1 = pd.DataFrame({'a': [1, 20],
                    'b': [10, 200],
                'c': [100, 300]})
print(df1)


    a    b    c
0   1   10  100
1  20  200  300

我想要这两种格式 - 格式 1-

0, a, 1
0, b, 10
0, c, 100

1, a, 20
1, b, 200
1, c, 300

格式2-

a=1
b=10
c=100

a=20
b=200
c=300

我可以转换为 dict 并进行一些迭代,但不确定这是否是最好的方法。

df1.to_dict()
{'a': {0: 1, 1: 20}, 
 'b': {0: 10, 1: 200}, 
 'c': {0: 100, 1: 300}
}

我怎样才能改变这个 -

0       a=1
1     b=10
2    c=100
3     a=20
4    b=200
5    c=300

返回

        a    b    c
   0   1   10  100
   1  20  200  300

【问题讨论】:

    标签: python arrays pandas dictionary dataframe


    【解决方案1】:

    IIUC,既然列名对你来说不重要,我就不改了

    s=df1.stack().reset_index()
    s
    Out[140]: 
       level_0 level_1    0
    0        0       a    1
    1        0       b   10
    2        0       c  100
    3        1       a   20
    4        1       b  200
    5        1       c  300
    New=s.level_1+'='+s[0].astype(str)
    New
    Out[142]: 
    0      a=1
    1     b=10
    2    c=100
    3     a=20
    4    b=200
    5    c=300
    dtype: object
    

    转换回来

    s=s.str.split('=',expand=True)
    
    s.assign(i=s.groupby(0).cumcount()).pivot('i',0,1)
    Out[208]: 
    0   a    b    c
    i              
    0   1   10  100
    1  20  200  300
    

    【讨论】:

    • 这就是我想要的。我还想从文件中读取格式,返回数据框中的行。 a=1 b=10 c=100 a=20 b=200 c=300 。到 a b c 0 1 10 100 1 20 200 300 我更新了问题。
    • s=s.str.split('=',expand=True) 需要改为s=New.str.split('=',expand=True)
    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2018-01-09
    • 2021-11-14
    • 2015-05-20
    • 2016-05-05
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多