重塑 pandas 中的数据

Reshape data in pandas

我有一个 csv 文件,当读入 pandas 时会生成以下格式的数据框

  0             1                           2                    3                4                  5                6
 Day          Time                      2020-05-01 00:00  2020-05-02 00:00  2020-05-03 00:00  2020-05-04 00:00  2020-05-05 00:00
Night       23:00:00                            33            45                  33               23               19
Night       1900-01-01 00:00                    33            45                  33               23               19
Night       1900-01-01 01:00                    33            45                  33               23               19
Night       1900-01-01 02:00                    33            45                  33               23               19
Night       1900-01-01 03:00                    33            41                  23               23               19
Night       1900-01-01 04:00                    33            41                  23               23               19

有没有办法将第一行转换为 pandas 中的新列,将数据输出为

 0            1                       2   3   4   5   6
Day          Time      Date          
Night       23:00   2020-05-01        33  45  33  23  19
Night       00:00   2020-05-02        33  45  33  23  19
Night       01:00   2020-05-03        33  45  33  23  19
Night       02:00   2020-05-04        33  45  33  23  19
Night       03:00   2020-05-05        33  41  23  23  19
Night       04:00   2020-05-06        33  41  23  23  19

第一步是按第二行获取列名:

df = pd.read_csv(file, header=[1])

然后拆分 Timereplace:

df['Time'] = df['Time'].str.split().str[-1].str.replace(':00:00', ':00')

通过DataFrame.insert

将新列添加到第 3 个位置
df.insert(2, 'Date', pd.date_range(df.columns[2], periods=len(df)))

设置新列名称:

df.columns = df.columns[:3].tolist() + np.arange(3, len(df.columns)).tolist()
print (df)
     Day   Time       Date   3   4   5   6   7
0  Night  23:00 2020-05-01  33  45  33  23  19
1  Night  00:00 2020-05-02  33  45  33  23  19
2  Night  01:00 2020-05-03  33  45  33  23  19
3  Night  02:00 2020-05-04  33  45  33  23  19
4  Night  03:00 2020-05-05  33  41  23  23  19
5  Night  04:00 2020-05-06  33  41  23  23  19