【问题标题】:Reshape data in pandas重塑 pandas 中的数据
【发布时间】:2023-12-09 12:39:01
【问题描述】:

我有一个 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

【问题讨论】:

  • read_csv 的代码是什么?

标签: python pandas pivot reshape


【解决方案1】:

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

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

然后用replace拆分Time列:

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

【讨论】:

  • 感谢您的回复。这帮助我重塑了我的数据