Python Pandas - Dataframe专栏 - 转换FY格式' 2015/2016'到' 15/16'

时间:2017-07-19 18:37:21

标签: python pandas dataframe

我的数据框中有一个专栏(称之为' FY'),其格式为财务年度值:2015/20162016/2017

我想转换整个列,以便改为15/1616/17等。

我假设你只是从字符串中取出第3,第4和第5个字符,以及第8和第9个字符,但是我们还没知道如何做到这一点。

有人能帮帮我吗?谢谢。

5 个答案:

答案 0 :(得分:5)

给定字符串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
  4. 的字符串中

    修改:基于其他答案直接与数据框架协作的单线解决方案:

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

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

答案 1 :(得分: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

答案 2 :(得分:3)

选项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

答案 3 :(得分:1)

如果你有一个字符串,你可以随时选择部分字符串:

foo =' abcdefg'

foo2 = foo [2:4]

print foo2

然后输出将是: CD

答案 4 :(得分:1)

试试这个

for index, rows in df.iterrows():
    s = rows["FY"]   
    df.loc[index, "FY"] = "".join(s[2:5] + s[7:])

此处df是数据框对象。