Python, заменяющий частичную строку в столбце данных - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть кадр данных, подобный следующему: -

df = pd.DataFrame(data={'Date':['12/05/2014', '12/05.2015', '12/05//2016'], 'Day':['Monday','Tuesday','Thursday']})

          Date       Day
0   12/05/2014    Monday
1   12/05.2015   Tuesday
2  12/05//2016  Thursday

Я хочу очистить столбец Дата , где некоторые даты имеют неправильный формат.Даты представлены в строковом формате, который я буду конвертировать в формат даты после очистки.

Я нашел некоторую помощь в других статьях stackoverfolw и попробовал следующее: -

1. Loop method

   for idx, row in df.iterrows():
       if '.' in df.loc[idx,'Date']:
           df.loc[idx,'Date'].replace('.','/')

2. Regex method

   df.Date.replace({'.','/'}, regex=True)

Ни один из перечисленных методоввернуть даты в нужном формате и вернуть кадр данных без изменений.Есть ли другой метод, который работает?

Кроме того, есть ли метод, с помощью которого можно в одной команде заменить оба вида строк ('.' И '//') на правильную строку ('/«)

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Я бы сделал это с replace:

df['Date'].replace(r'\D+', '/', regex=True)

0    12/05/2014
1    12/05/2015
2    12/05/2016
Name: Date, dtype: object

df['Date'] = pd.to_datetime(df['Date'].replace(r'\D+', '/', regex=True))
df

        Date       Day
0 2014-12-05    Monday
1 2015-12-05   Tuesday
2 2016-12-05  Thursday

Или, str.replace:

pd.to_datetime(df['Date'].str.replace(r'\D+', '/'))

0   2014-12-05
1   2015-12-05
2   2016-12-05
Name: Date, dtype: datetime64[ns]

Шаблон \D+ будет соответствовать последовательности символов, которые НЕ являются цифрами,и замените их все одним слешем (это то, что вам нужно).


Другой вариант - extractall, просто для удовольствия.

pd.to_datetime(df['Date'].str.extractall(r'(\d+)')[0]
                         .unstack()
                         .set_axis(['month', 'day', 'year'], inplace=False, axis=1))

0   2014-12-05
1   2015-12-05
2   2016-12-05
dtype: datetime64[ns]
0 голосов
/ 19 февраля 2019

Вы можете использовать API .str в столбце Дата, чтобы заменить либо точку, либо несколько косых черт одной косой чертой..str.replace по умолчанию использует регулярное выражение.

df.Date.str.replace(r'[\./]+', '/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...