Pandas: Ошибка значения: недопустимый литерал для int() с основанием 10: ‘1/’ при извлечении месяца из строк даты с однозначными месяцами

#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