Обнаружена ошибка преобразования часового пояса при преобразовании часового пояса большого списка временных меток в файле excle с python - PullRequest
0 голосов
/ 02 мая 2018

У меня есть файл Excel с именем "hello.xlsx". Существует столбец меток времени, который содержит много строк (на данный момент более 80 000 строк). Файл в основном выглядит так:

04/19/2018 01:37:33

04/19/2018 01:37:54

04/19/2018 01:37:57

04/19/2018 01:37:59

04/19/2018 01:38:05

04/19/2018 01:38:10

04/19/2018 01:38:38

04/19/2018 01:39:29

04/19/2018 01:39:32

04/19/2018 01:39:44

04/19/2018 01:39:51

И так далее ...

Эти временные метки указаны в формате UTC, и мне нужно преобразовать их в тихоокеанское время США (UTC, -7).

Я новичок в Python, и на самом деле я не знаю, как сделать такое преобразование. Я спросил онлайн и получил полезный ответ. Код выглядит так:

df = pd.read_excel('hello.xlsx', header=None)

local_tz = pytz.timezone('US/Pacific')

df[0] = df[0].apply(lambda x: x.replace(tzinfo=pytz.utc).astimezone(local_tz).replace(tzinfo=None))

df.to_excel('out.xlsx', index=False, header=False)

Однако после того, как я его запустил, произошла ошибка:

TypeError: replace() takes no keyword arguments

Я искал в Интернете, чтобы найти решение, но не смог сделать это правильно. Я надеюсь, что кто-то может помочь понять это. Новые методы также приветствуются. Спасибо ~:)

1 Ответ

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

Проблема в том, что вы пытаетесь применить метод из класса datetime к объекту str. Вам необходимо преобразовать строки, считанные из файла Excel, в объект datetime перед применением преобразования часового пояса.

import pandas as pd
import pytz
from datetime import datetime

df = pd.read_excel('hello.xlsx', header=None)
local_tz = pytz.timezone('US/Pacific')
local_fmt = "%m/%d/%Y %H:%M:%S"

df[0] = df[0].apply(lambda x: datetime.strptime(x, local_fmt))
df[0] = df[0].apply(lambda x: x.replace(tzinfo=pytz.utc).astimezone(local_tz).replace(tzinfo=None))
df.to_excel('out.xlsx', index=False, header=False)
...