Как я могу получить подстроку строки в столбце, возвращаемом loc?

#python #pandas #string #dataframe #copy

#python #pandas #строка #фрейм данных #Копировать

Вопрос:

У меня есть фрейм данных (df), в котором есть столбец «Дата создания».

Мне нужно соединить строку внутри ‘Дата создания’, чтобы у меня остался только числовой день вместо всей строки даты и времени (например, я хочу сократить ‘Sun Mar 03 2020 11:52 pm’ до «2020/03 /» ‘строка в дате создания’ [8:10] (9-й и 10-й символы).

Я пробовал это, но получаю предупреждение о копировании:

 for x in range(len(df)):
  df.iloc[x]['date'] = "202003"   (df.iloc[x]['Date Created'])[8:10]
  

Я перехожу к документации, и там есть инструкции о том, как использовать loc для получения подстрок, но они делают это для очень конкретного примера, который не применяется к моему коду.

Тогда я попробовал это:

 df['date'] = ''
df.loc[:,['Date Created']] = "202003"  (df.loc[:,['Date Created']])[8:10]
  

Но это также не работает. Может кто-нибудь, пожалуйста, помочь в том, как я могу получить 9-й и 10-й символы каждой строки созданной даты и присвоить их новому столбцу (или даже заменить существующее значение в созданной дате)? ТИА!

Ответ №1:

Я создал этот фрейм данных.

 df = pd.DataFrame({"Date Created": ["Sun Mar 03 2020 11:52 pm", 
                                    "Sun Mar 08 2020 11:52 pm",
                                    "Sun Mar 09 2020 11:52 pm"]})
  

Итак, с

 df.loc[:, "Date Created"] = "202003"   df["Date Created"].str[8:10]
  

Вы получите это

введите описание изображения здесь

Ответ №2:

Альтернативным подходом будет доступ day к полю datetime объекта:

 import pandas as pd

df = pd.DataFrame({"Date Created": [
  "Sun Mar 01 2020 11:52 pm", 
  "Sun Mar 08 2020 11:52 pm",
  "Sun Mar 15 2020 11:52 pm"
]})

df
  

Вывод:

     Date Created
0   Sun Mar 01 2020 11:52 pm
1   Sun Mar 08 2020 11:52 pm
2   Sun Mar 15 2020 11:52 pm
  

.

 df['year'] = pd.DatetimeIndex(df['Date Created']).year
df['month'] = pd.DatetimeIndex(df['Date Created']).month
df['day'] = pd.DatetimeIndex(df['Date Created']).day
df['formatted'] = pd.DatetimeIndex(df['Date Created']).strftime('%Y/%m/%d')
df
  

Вывод:

     Date Created                year    month   day formatted
0   Sun Mar 01 2020 11:52 pm    2020    3       1   2020/03/01
1   Sun Mar 08 2020 11:52 pm    2020    3       8   2020/03/08
2   Sun Mar 15 2020 11:52 pm    2020    3       15  2020/03/15