Чтение CSV-файла с именами столбцов в виде строк и редактирование даты и времени - PullRequest
0 голосов
/ 30 мая 2018

У меня есть огромный файл данных, который выглядит следующим образом.Я указал только несколько параметров в столбце «Имя».У меня есть 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-0900:00:16 1 182 8783 8422 2018-04-09 00:00:28 1 184 8545 8370

Я думаю, что второе возможно при использовании pd.pivot (index =«дата», столбцы = «имя», значения = «значения»).Как только я смогу получить одинаковые даты наборов, я могу использовать этот фрагмент кода для получения желаемого результата:

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.Может ли кто-нибудь, пожалуйста, вести меня?

1 Ответ

0 голосов
/ 30 мая 2018

Решение работает, если повторять pattern для каждых 4 строк и каждая группа содержит ME_POW_1 строку:


Я думаю, что вы можете сначала добавить параметр parse_dates по списку date и *Столбец 1008 * для datetimes:

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

Затем получите Date_Time, отфильтровав ME_POW_1 строк и создав индекс по умолчанию 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...