Панды: разделите строку питоническим способом

#python #pandas

#python #pandas

Вопрос:

У меня есть серия pandas date , которая выглядит следующим образом:

 date       | ...
09.01.2000 |
02.02.2000 |
...
  

Формат — ДД-ММ-ГГГГ. Я хочу разделить их на три столбца День, месяц и год.
Я пытался:

 col = date["date"].str.split(".", expand = True)
date["day"] = col[0]
date["month"] = col[1]
...
  

Это довольно неудобно, так есть ли более питоновский способ? Я также пробовал pd.to_datetime, но это не самый короткий путь.

Комментарии:

1. Преобразуйте столбец в datetime , это дает вам гораздо больше замечательных возможностей. Если вы используете разделение, это будет строка. Если вы преобразуете его в datetime , вы можете выполнять множество операций (например, Groupby), даже не создавая новые столбцы для даты, недели, года, месяца … и т. Д

2. @moys Я полагаю, вы имеете в виду datetime ?

3. @Code-Ученик Да. Это то, что я имел в виду.

Ответ №1:

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

 df[['day', 'month', 'year']] = df['date'].str.split('.', expand=True)
  

          date day month  year
0  09.01.2000  09    01  2000
1  02.02.2000  02    02  2000
  

Ответ №2:

Один из вариантов — использовать одно назначение:

 date['date'], date['month'] = col
  

Предполагается, что split() возвращает список ровно с двумя элементами.

Ответ №3:

Вы можете сделать что-то вроде этого.

 import pandas as pd
df = pd.DataFrame({'date':['09.01.2000', '02.02.2000']})

df['mon'],df['day'],df['year'] = zip(*df['date'].str.split('.'))
print (df)
  

Это даст вам приведенный ниже фрейм данных. Если вы не хотите df['date'] , то вы можете использовать функцию drop() для удаления столбца.

          date mon day  year
0  09.01.2000  09  01  2000
1  02.02.2000  02  02  2000