#python #pandas #jupyter-notebook
Вопрос:
all_data['Month'] = all_data['Order Date'].str[0:2]
all_data['Month'] = all_data['Month'].astype('int32')
all_data.head()
Я полагаю, что получаю эту ошибку из-за того, что месяцы с одной цифрой(январь-сентябрь) имеют на одно значение меньше, чем месяцы с октября по декабрь в столбце «Дата заказа».
Пример:
написано 4.12.2017
вместо 04/12/2017
Не совсем уверен, как подойти к этому, чтобы решить проблему, любые предложения будут с удовольствием оценены, спасибо!
Комментарии:
1. Вместо нарезки струн, почему бы и нет
str.spilt('/')
или что-то в этом роде? Или проанализируйте непосредственно сdatetime
помощьюstrptime
Ответ №1:
Вы можете попытаться разделить строку даты на str.split()
, а затем получить первую разделенную подстроку .str[0]
следующим образом:
all_data['Month'] = all_data['Order Date'].str.split('/').str[0].astype('int32')
Кроме того, вы также можете преобразовать строку даты в формат pd.to_datetime
даты и времени , а затем получить месяц dt.month
, как показано ниже;
all_data['Month'] = pd.to_datetime(all_data['Order Date']).dt.month
Было бы полезно также указать строку формата, если ваш формат строки даты находится в mm/dd/yyyy
:
all_data['Month'] = pd.to_datetime(all_data['Order Date'], format='%m/%d/%Y').dt.month
Добавление строки формата format='%m/%d/%Y'
позволяет избежать двусмысленности, является ли это первым месяцем или первым днем, а также, возможно, ускорит процесс анализа даты Пандами.
Результат:
print(all_data)
Order Date Month
0 4/12/2017 4
1 04/12/2017 4
Ответ №2:
Для большей точности вы могли бы использовать:
import pandas as pd
df = pd.DataFrame(
{
"name": ["Tom", "Andy", "Lucas"],
"DoB": ["08/05/1997", "04/28/1996", "12/16/1995"],
}
)
df["Month"] = pd.to_datetime(df["DoB"]).dt.month
print(df)
Выход:
name DoB Month
0 Tom 08/05/1997 8
1 Andy 04/28/1996 4
2 Lucas 12/16/1995 12
Ссылка: https://towardsdatascience.com/working-with-datetime-in-pandas-dataframe-663f7af6c587