Python数据帧列将格式为“2015/2016”的FY转换为“15/16”

2024-04-19 18:55:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我的数据框中有一列(称为“FY”),它的财政年度值的格式为:2015/20162016/2017。你知道吗

我想把整个列转换成15/16或者16/17等等。你知道吗

我猜你只是从字符串中提取了第3、4、5个字符,以及第8、9个字符,但不知道怎么做。你知道吗

有人能帮我吗?非常感谢。你知道吗


Tags: 数据字符串格式个字符fy财政年度
3条回答

下面是使用此示例数据集的另一种方法:

df
          fy
0  2015/2016
1  2016/2017
2  2017/2018

df['fy_new'] = df['fy'].str[2:4] + '/' + df['fy'].str[7:9]
df
          fy fy_new
0  2015/2016  15/16
1  2016/2017  16/17
2  2017/2018  17/18

给定一个字符串date = "2015/2016",您可以执行以下操作来获得15/16

  1. 使用left, right = date.split('/')捕获两个单独的日期
  2. 从字符串中删除除最后2个字符以外的所有字符:

    new_left = left[-2:]
    new_right = right[-2:]
    
  3. 将新字符串与new_date = new_left+'/'+new_right合并成一个字符串

编辑:基于其他答案,直接与数据帧一起工作的一行解决方案:

df['new'] = df['fy'].str.split('/')[0][-2:] +'/'+ df['fy'].str.split('/')[1][-2:]

这是一种更通用的方法,因为它适用于长度不同的字符串,只获取最后2个字符,防止错误索引的错误,并防止您硬编码它们(即使您的日期可能总是每个有4个字符加上“/”,至少在未来8000年)

选项1
使用pd.Series.str.replace

df.FY.str.replace('\d{2}(\d{2}/)\d{2}(\d{2})', r'\1\2')

0    15/16
1    16/17
Name: FY, dtype: object

选项2
使用pd.DataFrame.replace

df.replace(dict(FY={'\d{2}(\d{2}/)\d{2}(\d{2})': r'\1\2'}), regex=True)

      FY
0  15/16
1  16/17

相关问题 更多 >