将列名称转换为第一行

时间:2017-05-15 09:34:14

标签: pandas

我想将以下数据帧转换为json。

df:
                               A   sector    B     sector    C     sector                              
TTM Ratio                      --   35.99   12.70  20.63  14.75      23.06
RRM Sales                      --  114.57    1.51   5.02   1.00    4594.13
MQR book                     1.48    2.64    1.02   2.46   2.73       2.74
TTR cash                       --   14.33    7.41  15.35   8.59  513854.86

为了通过使用函数df.to_json()来实现这一点,我需要在列和索引中使用唯一的名称。

因此我想要的是将列名转换为行并具有默认列号。总之,我想要以下输出:

df:
                               0     1       2       3       4       5 
                               A   sector    B     sector    C     sector                              
TTM Ratio                      --   35.99   12.70  20.63  14.75      23.06
RRM Sales                      --  114.57    1.51   5.02   1.00    4594.13
MQR book                     1.48    2.64    1.02   2.46   2.73       2.74
TTR cash                       --   14.33    7.41  15.35   8.59  513854.86

将列名称转换为第一行,以便我可以正确进行转换。

2 个答案:

答案 0 :(得分:2)

使用list range和原始列名称分配:

print (range(len(df.columns)))
range(0, 6)

#for python2 list can be omit
df.columns = [list(range(len(df.columns))), df.columns]

MultiIndex.from_arrays

df.columns = pd.MultiIndex.from_arrays([range(len(df.columns)), df.columns])

也可以使用RangeIndex

print (pd.RangeIndex(len(df.columns)))
RangeIndex(start=0, stop=6, step=1)

df.columns = pd.MultiIndex.from_arrays([pd.RangeIndex(len(df.columns)), df.columns])
print (df)
              0       1      2        3      4          5
              A  sector      B   sector      C     sector
TTM Ratio    --   35.99  12.70    20.63  14.75      23.06
RRM Sales    --  114.57   1.51     5.02   1.00    4594.13
MQR book   1.48    2.64   1.02     2.46   2.73       2.74
TTR cash     --   14.33   7.41    15.35   8.59  513854.86

答案 1 :(得分:2)

您还可以在numpy中使用vstack:

>>> df
   x  y  z
0  8  7  6
1  6  5  4

>>> pd.DataFrame(np.vstack([df.columns, df]))
   0  1  2
0  x  y  z
1  8  7  6
2  6  5  4

在这种情况下,列变为实际的第一行。