работа с CSV-файлом по следующей схеме
«Идентификатор заявки»: polars.datatypes.Int64, .. «Время создания»: polars.datatypes.Utf8, «Срок выполнения»: polars.datatypes.Utf8, ..
Преобразование в дату и время:
df = (
df.lazy()
.select(list_cols)
.with_columns([
pl.col(convert_to_date).str.strptime(pl.Date, fmt='%d-%m-%Y %H:%M',strict=False).alias("Create_date") #.cast(pl.Datetime)
])
)
Вот результат. «Время создания» — это исходная строка, а «Дата_создания» — преобразование:
Получение набора нулей и некоторых преобразований даты кажется неверным (см. 4-ю строку в выводе выше). Кроме того, как я могу сохранить значения времени?
Конечно, я делаю что-то не так, и любая помощь будет принята с благодарностью.
import polars as pl
from datetime import datetime
from datetime import date, timedelta
import pyarrow as pa
import pandas as pd
convert_to_date = ['Created time','Due by Time','Resolved time','Closed time','Last update time','Initial response time']
url = 'https://raw.githubusercontent.com/DOakville/PolarsDate/main/3000265945_tickets-Dates.csv'
df = (
pl.read_csv(url,parse_dates=True)
)
df = df.with_column(
pl.col(convert_to_date).str.strptime(pl.Date, fmt='%d-%m-%Y %H:%M',strict=False).alias("Create_date") #.cast(pl.Datetime)
)
Привет, Александр, поле для комментариев было слишком длинным, поэтому я разместил код, который читается из файла git, выше в основном тексте. Надеюсь, это работает, и это то, что вы просили. Заранее спасибо.
Аааа... Кажется, я понимаю, что происходит - ваше выражение with_columns
успешно преобразует все столбцы, указанные в списке "convert_to_date", но присваивает результат каждого преобразования одному и тому же имени: "Дата создания".
Таким образом, значения, которые вы, наконец, получаете, поступают из последнего столбца, подлежащего преобразованию («Начальное время отклика»), который содержит нули там, где вы их видите.
Если вы хотите, чтобы каждый столбец был связан с отдельной записью с преобразованной датой, вы можете использовать выражение suffix
, чтобы убедиться, что каждое преобразование сопоставляется с отдельным выходным столбцом (на основе исходного имени).
Например:
df.with_columns(
pl.col(convert_to_date).str.strptime(
datatype = pl.Date,
fmt = '%d-%m-%Y %H:%M',
).suffix(" date") # << adds " date" to the existing column name
)
Или, если вы предпочитаете перезаписывать существующие столбцы преобразованными, вы можете сохранить существующие имена столбцов:
df.with_columns(
pl.col(convert_to_date).str.strptime(
datatype = pl.Date,
fmt = '%d-%m-%Y %H:%M'
).keep_name() # << keeps original name (effectively overwriting it)
)
Наконец, если вам действительно нужны даты и время (не даты), просто измените значение параметра datatype
в выражении strptime на pl.Datetime
.
Можете ли вы опубликовать автономный пример с несколькими строками данных? Было бы полезно помочь точно понять, что происходит, и предложить исправление/обходной путь. (Я вижу значения в таблице, но если в вашем файле есть разница, было бы неплохо увидеть и исходные значения).