Как сохранить разделители с помощью df.str.split () с несколькими разделителями - PullRequest
2 голосов
/ 20 июня 2019

Фрейм данных, в котором я работал, имеет столбец, в котором указывается дата и время с часовым поясом, например: 2019-01-23T04: 30: 00 + 01: 00.

                    Horodate
0  2019-01-23T04:30:00+01:00
1  2019-01-23T04:30:00+01:00
2  2019-01-23T04:30:00+01:00
3  2019-01-23T04:30:00-01:00

Мне бы хотелось получить информацию о часовом поясе и поместить ее в другой столбец под названием «TimeZone».Я мог бы сделать это, применив эту функцию:

df["TimeZone"] = "+"  + df["Horodate"].str.split('[+]').str[1] 

, которая прекрасно работает:

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00      NaN

, но она действительна только для часового пояса, который начинается с "+".Я хотел бы найти способ извлечь всю информацию о часовом поясе, включая сигнал «+» или «-», и получить кадр данных, который выглядит следующим образом:

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00   -01:00

Я думаю, что должен перейти кразделить несколько разделителей, но проблема в том, как включить разделитель одновременно мне нужно разделить строку?Я могу получить хороший результат, просто порезав строку:

df_test["TimeZone"] =  df_test["Horodate"].str[19:] 

, но это не общий способ сделать это.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 20 июня 2019

Вы также можете использовать Series.str.extract с шаблоном regex:

df['TimeZone'] =  df['Horodate'].str.extract(r'([+-]\d{2}:\d{2})')

[вне]

                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00   -01:00
2 голосов
/ 20 июня 2019

str.sub разрешить регулярные выражения, поэтому вы можете сделать:

df['Timezone'] = df.Horodate.str.replace('(.*)([+-])(.*)', r'\2\3')
2 голосов
/ 20 июня 2019

Как насчет простой нарезки строк?

In [285]: df["TimeZone"] = df["Horodate"].str[-6:] 

In [286]: df
Out[286]: 
                    Horodate TimeZone
0  2019-01-23T04:30:00+01:00   +01:00
1  2019-01-23T04:30:00+01:00   +01:00
2  2019-01-23T04:30:00+01:00   +01:00
3  2019-01-23T04:30:00-01:00   -01:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...