gpt4 book ai didi

python - 读取以列名作为行的 csv 文件并编辑日期时间

转载 作者:行者123 更新时间:2023-12-01 09:23:51 25 4
gpt4 key购买 nike

我有一个巨大的数据文件,如下所示。我在“名称”列中仅显示了几个参数。我有 24 个不断重复的内容。

    Name    Value      Date            Time
0 FAN_RFB 1 2018-04-07 02:34:43
1 KW_TOTAL 186 2018-04-08 23:59:58
2 ME_POW_1 8618 2018-04-08 23:59:56
3 ME_POW_2 8315 2018-04-08 23:59:56
4 FAN_RFB 1 2018-04-07 02:34:43
5 KW_TOTAL 185 2018-04-09 00:00:07
6 ME_POW_1 8467 2018-04-09 00:00:09
7 ME_POW_2 8350 2018-04-09 00:00:09
8 FAN_RFB 1 2018-04-07 02:34:43
9 KW_TOTAL 182 2018-04-09 00:00:15
10 ME_POW_1 8783 2018-04-09 00:00:16
11 ME_POW_2 8422 2018-04-09 00:00:16
12 FAN_RFB 1 2018-04-07 02:34:43
13 KW_TOTAL 184 2018-04-09 00:00:26
14 ME_POW_1 8545 2018-04-09 00:00:28
15 ME_POW_2 8370 2018-04-09 00:00:28

我想用这个做两件事:

  1. 每组的正确日期和时间是为 ME_POW_1 记录的日期和时间。因此,对于索引 0 到 3,我想使用 ME_POW_1 的数据和时间来更正所有数据的日期和时间,并且我想对所有数据执行此操作。

  2. “名称”列中的名称应旋转到各个列。所需的输出是:

    日期时间 FAN_RFB KW_TOTAL ME_POW_1 ME_POW_2 2018-04-08 23:59:56 1 186 8618 8315 2018-04-09 00:00:09 1 185 8467 8350 2018-04-09 00:00:16 1 182 8783 8422 2018-04-09 00:00:28 1 184 8545 8370

我认为第二个可能可以通过使用 pd.pivot (index='date', columns='Name', values='Values') 来实现。一旦我可以获得相似的集合的日期,我就可以使用这段代码来获得所需的输出:

raw=pd.read_csv('example.csv', parse_dates=True, usecols=[0,1,2,3])
raw['Date']=pd.to_datetime(raw['Date']+''+raw['Time'])
raw=raw.drop(['Time'], axis=1)
raw1=raw.pivot(index='Date', columns='Name', values='Value')

但我不知道如何完成第一个任务,根据 ME_POW_1 的日期和时间更改每组的日期。有人可以指导我吗?

最佳答案

如果每 4 行重复 pattern 并且每组包含 ME_POW_1 行,则解决方案有效:

<小时/>

我认为您可以首先通过 datetime 列的列表为 datetimes 添加参数 parse_dates:

df=pd.read_csv('example.csv', usecols=[0,1,2,3], parse_dates=[['Date','Time']])

print (df)
Date_Time Name Value
0 2018-04-07 02:34:43 FAN_RFB 1
1 2018-04-08 23:59:58 KW_TOTAL 186
2 2018-04-08 23:59:56 ME_POW_1 8618
3 2018-04-08 23:59:56 ME_POW_2 8315
4 2018-04-07 02:34:43 FAN_RFB 1
5 2018-04-09 00:00:07 KW_TOTAL 185
6 2018-04-09 00:00:09 ME_POW_1 8467
7 2018-04-09 00:00:09 ME_POW_2 8350
8 2018-04-07 02:34:43 FAN_RFB 1
9 2018-04-09 00:00:15 KW_TOTAL 182
10 2018-04-09 00:00:16 ME_POW_1 8783
11 2018-04-09 00:00:16 ME_POW_2 8422
12 2018-04-07 02:34:43 FAN_RFB 1
13 2018-04-09 00:00:26 KW_TOTAL 184
14 2018-04-09 00:00:28 ME_POW_1 8545
15 2018-04-09 00:00:28 ME_POW_2 8370

然后通过过滤 ME_POW_1 行获取 Date_Time 并按 reset_index 创建默认索引:

s = df.loc[df['Name'] == 'ME_POW_1', 'Date_Time'].reset_index(drop=True)
print (s)
0 2018-04-08 23:59:56
1 2018-04-09 00:00:09
2 2018-04-09 00:00:16
3 2018-04-09 00:00:28
Name: Date_Time, dtype: datetime64[ns]

4 行和最后 insert 的最后一个数据点第一个位置的新列:

df = pd.pivot(index=df.index // 4, columns=df['Name'], values=df['Value'])

df.insert(0, 'Date', s)
print (df)
Name Date FAN_RFB KW_TOTAL ME_POW_1 ME_POW_2
0 2018-04-08 23:59:56 1 186 8618 8315
1 2018-04-09 00:00:09 1 185 8467 8350
2 2018-04-09 00:00:16 1 182 8783 8422
3 2018-04-09 00:00:28 1 184 8545 8370

关于python - 读取以列名作为行的 csv 文件并编辑日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50611273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com