DateTime при сохранении кадра данных pandas в CSV

Фон: Очевидно, у 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? Помните, что когда Excel находит дату, он выполняет СОБСТВЕННОЕ форматирование. Вы должны установить форматирование, которое вы хотите использовать в Excel.

Tim Roberts 22.03.2022 06:23

Большую часть времени я открывал файл в Excel и Notepad++. С первой попытки я попытался принудительно установить формат Excel через df.to_csv(filename, date_format = "%Y-%m-%d"), но безуспешно. Я подхожу к этому неправильно?

William 22.03.2022 06:27

Вы говорите "при предварительном просмотре" - как именно? Если тип данных столбца «объект», вероятно, это на самом деле строка, поэтому, возможно, ваш метод предварительного просмотра анализирует строку в формате, который вам не нравится. В любом случае, "%Y%d%d", конечно, никогда не будет давать "%Y-%m-%d" результат.

Grismar 22.03.2022 06:42
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш вопрос содержал различные опечатки, которые, кажется, предполагают, что может быть причиной проблемы в целом.

Есть несколько вопросов к тому, что вы говорите. Рассмотреть возможность:

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.

William 22.03.2022 06:52

Другие вопросы по теме