#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. Я не знаю точно, как выглядят ваши данные, но это может произойти, если, например, некоторые ячейки в вашем столбце «освобождено» не содержат запятой. Вот почему я написал «предполагая, что ваша колонка «выпущено» всегда имеет одну и ту же структуру».