Метод Панд для копирования определенных элементов из столбца

#python #pandas

Вопрос:

В колонке «выпущено» в моем df есть такие даты, как «20 июня 1980 года (Соединенные Штаты). В столбце «год» в том же df указаны только такие годы, как «1980».

Но в некоторых строках в столбце «год» указаны годы, которые не соответствуют годам в столбце «выпущено» для той же строки.

Я использовал приведенный ниже код для создания новой колонки «год» :

 df['yearcorrect'] = df['released'].astype(str).str[6:11]
df
 

Это выполняется, но не возвращает год. Он возвращает информацию, такую как «198», «19» и т. Д.

Я надеюсь, что проблема достаточно ясна. пожалуйста, помогите.

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

1. Вместо этого я бы предложил разделить год по-другому, например, разделив строку

Ответ №1:

Как предложено в комментарии — разделите строку пробелами и возьмите третий элемент. Предполагая, что ваши данные выглядят следующим образом:

 df = pd.DataFrame({'released': ['June 20, 1980 (United States)','May 18, 1970 (Sweden)']})
df['year'] = df['released'].apply(lambda x: x.split()[2])
 

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

1. Спасибо. Я получил эту ошибку; — — — — > 3 df[‘yearcorrect’] = df[«выпущен»]. тип(str).применить(лямбда x: x.разделение()[2]) 4 ошибка индекса df: индекс списка вне диапазона

2. Как выглядят другие строки в столбце? Возможно, это связано с тем, что строка не всегда выглядит так, как вы написали в вопросе. Может быть, попробуем запустить его без [2] этого ?

3. Другие строки выглядят точно так же, как в вопросе. Я попытался запустить его без [2], но он вернул ошибку.

4. На самом деле, вам не должно быть нужно .astype(str) , так как я предполагаю, что ваш столбец уже является строкой? Я предполагаю, что что-то в ваших данных выглядит по-другому, но мне трудно это понять. Попробуйте посмотреть на этот пример: df = pd.DataFrame({'released': ['June 20, 1980 (United States)','May 18, 1970 (Sweden)']}) df['year'] = df['released'].apply(lambda x: x.split()[2]) df

Ответ №2:

Предполагая, что ваш столбец «освобожден» всегда имеет одну и ту же структуру, вы можете использовать:

 import re

df['yearcorrect'] = df.apply(lambda x: re.sub('[^0-9]', "", x.released.split(",")[1]), axis = 1)
 

который извлекает только числовые символы в части строки после запятой.

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

1. <ipython-вход-42-fb44b41738fb> в <ipython-вход-42-fb44b41738fb><лямбда>(x) 3 импорт re 4 —-<лямбда>> 5 df[‘yearcorrect’] = df.применить(лямбда x: re.sub(‘[^0-9]’, «», x.освобожден.разделен(«,»)[1]), ось = 1) Ошибка индекса: индекс списка вне диапазона

2. Я не знаю точно, как выглядят ваши данные, но это может произойти, если, например, некоторые ячейки в вашем столбце «освобождено» не содержат запятой. Вот почему я написал «предполагая, что ваша колонка «выпущено» всегда имеет одну и ту же структуру».