【问题标题】:How to replace first two letters of a column value using index如何使用索引替换列值的前两个字母
【发布时间】:2018-05-04 21:32:47
【问题描述】:

我有一个数据框

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

我想做什么:如果 year = 2014 ,则将名称列中的前两个字母替换为“XX”。

我的代码:

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

首先我得到这个错误: ValueError:无法使用包含 NA / NaN 值的向量进行索引

但即使有一个值而不是 None - 说 'jimy' - 我得到以下错误: KeyError: "['jo' 'to' 'bo' 'ro' 'ji'] not in index"

我也想到了替换方法,但它只有在你想替换给定的字符串时才有效。

有什么建议吗?

【问题讨论】:

    标签: python string python-3.x pandas dataframe


    【解决方案1】:

    你很接近。请注意,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
    

    【讨论】:

      猜你喜欢
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2021-09-25
      相关资源
      最近更新 更多