Фон: Очевидно, у Google нет прямого ответа на очень простой вопрос, так что вот...
У меня есть панды df
со столбцом Open Date
[Dtype = object], который (при предварительном просмотре df
) отформатирован yyyy-mm-dd
, это тот формат, который мне нужен, отлично! Однако не так здорово, когда я пишу df
в .csv
, который затем устанавливает форматирование по умолчанию в m/dd/yyyy
.
Проблема: Я пробовал практически все, чтобы .csv
выводил yyyy-dd-mm
, но безрезультатно.
Что я пробовал:
Я пытался указать формат даты при написании .csv
df.to_csv(filename, date_format = "%Y%d%d")
Я попытался изменить формат рассматриваемого столбца, прежде чем писать в .csv
df['Open Date'] = pd.to_datetime(df['Open Date'])
Я также попытался преобразовать столбец в строку, чтобы попытаться заставить правильный вывод
df['Open Date'] = df['timestamp'].apply(lambda v: str(v))
Несмотря на эти попытки, я все равно получаю результат m/dd/yyyy
.
Помощь:, где я досадно ошибаюсь?
Большую часть времени я открывал файл в Excel и Notepad++. С первой попытки я попытался принудительно установить формат Excel через df.to_csv(filename, date_format = "%Y-%m-%d")
, но безуспешно. Я подхожу к этому неправильно?
Вы говорите "при предварительном просмотре" - как именно? Если тип данных столбца «объект», вероятно, это на самом деле строка, поэтому, возможно, ваш метод предварительного просмотра анализирует строку в формате, который вам не нравится. В любом случае, "%Y%d%d"
, конечно, никогда не будет давать "%Y-%m-%d"
результат.
Ваш вопрос содержал различные опечатки, которые, кажется, предполагают, что может быть причиной проблемы в целом.
Есть несколько вопросов к тому, что вы говорите. Рассмотреть возможность:
from pandas import DataFrame
from datetime import datetime
# just some example data, including some datetime and string data
data = [
{'Open date': datetime(2022, 3, 22, 0, 0), 'value': '1'},
{'Open date': datetime(2022, 3, 22, 0, 1), 'value': '2'},
{'Open date': datetime(2022, 3, 22, 0, 2), 'value': '3'}
]
df = DataFrame(data)
# note how the 'Open date' columns is actually a `datetime64[ns]`
# the 'value' string however is what you're saying you're getting, `object`
print(df['Open date'].dtype, df['value'].dtype)
# saving with a silly format, to show it works:
df.to_csv('test.csv', date_format='%Y.%m.%d')
Результирующий файл:
,Open date,value
0,2022.03.22,1
1,2022.03.22,2
2,2022.03.22,3
Я выбрал глупый формат, потому что формат по умолчанию для меня на самом деле %Y-%m-%d
.
Наиболее вероятная проблема заключается в том, что ваш столбец «дата» на самом деле является строковым столбцом, но инструменты, которые вы используете для «предварительного просмотра» ваших данных, интерпретируют эти строки как даты и фактически отображают их в каком-то другом формате.
Однако, с ограниченной информацией, которую вы предоставили, это догадки. Если вы предоставите несколько примеров данных, демонстрирующих проблему, будет легче сказать наверняка.
Ваш ответ получает галочку, потому что он заставил меня задуматься - я запустил intl.cpl
из Windows Search box
и понял, что, во-первых, мои региональные настройки по умолчанию использовали все значения short date
в формате, отличном от того, который я хочу. Во-вторых, я еще раз посмотрел в Notepad++ и заметил, что формат идеально совпадает с моим df
.
Во-первых, как вы это проверили? Вы смотрели файл в текстовом редакторе или (как я подозреваю) просто открыли его в Excel? Помните, что когда Excel находит дату, он выполняет СОБСТВЕННОЕ форматирование. Вы должны установить форматирование, которое вы хотите использовать в Excel.