Как заменить первые две буквы значения столбца с помощью индекса - PullRequest
0 голосов
/ 05 мая 2018

У меня есть фрейм данных

d = {'name': ['john', 'tom', 'bob', 'rock', None], 'DoB': ['01/02/2010', '01/02/2012', '11/22/2014', '11/22/2014', '09/25/2016'], 'Address': ['NY', 'NJ', 'PA', 'NY', 'CA']}
df = pd.DataFrame(data = d)
df['month'] = pd.DatetimeIndex(df['DoB']).month
df['year'] = pd.DatetimeIndex(df['DoB']).year

enter image description here

Что я хочу сделать: замените первые две буквы на «XX» в столбце имени, если год = 2014.

Мой код:

df.loc[ (df.year == 2014) , df.name.str[0:2] ] = 'XX'

Прежде всего, я получаю эту ошибку: ValueError: не может индексировать вектор, содержащий значения NA / NaN

Но даже если вместо None было значение - скажем 'jimy' - я получаю следующую ошибку: KeyError: "['jo' 'to' 'bo' 'ro' 'ji'] нет в индексе"

Я также думал о методе замены, но он работает, только если вы хотите заменить данную строку.

Есть предложения?

1 Ответ

0 голосов
/ 05 мая 2018

Вы рядом. Обратите внимание, что pd.DataFrame.loc использует метку столбца в качестве второго индексатора.

mask = df['year'] == 2014
df.loc[mask, 'name'] = 'XX' + df.loc[mask, 'name'].str[2:]

print(df)

  Address         DoB  name  month  year
0      NY  01/02/2010  john      1  2010
1      NJ  01/02/2012   tom      1  2012
2      PA  11/22/2014   XXb     11  2014
3      NY  11/22/2014  XXck     11  2014
4      CA  09/25/2016  None      9  2016
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...