我有一个数据框
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
我想做什么:如果年份= 2014,请在名称栏中将前两个字母替换为“XX”。
我的代码:
df.loc[ (df.year == 2014) , df.name.str[0:2] ] = 'XX'
首先我收到此错误: ValueError:无法使用包含NA / NaN值的向量进行索引
但即使有一个值而不是None - 说'jimy' - 我得到以下错误:KeyError:“['jo''到''bo''ro''ji']而不是索引”
我还想到了替换方法,但只有在你想要替换给定的字符串时它才有效。
有什么建议吗?
答案 0 :(得分:2)
你很亲密。请注意,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