2017-07-19 63 views
1

我的数据框中有一列(称为'FY'),其中的财务年度值格式为:2015/20162016/2017Python Pandas - Dataframe专栏 - 将FY格式'2015/2016'转换为'15/16'

我想将整列转换为15/1616/17等。

我假设你不知何故只能从字符串,以及第8和第9个字符中取出第3,第4和第5个字符,但还没有弄清楚如何去做。

任何人都可以帮助我吗?谢谢。

回答

4

给出一个字符串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个字符加上'/',至少在接下来的8,000年内)

+1

非常感谢。正如你所说的那样工作。我有upvoted。我希望你不要介意,但我会接受安德鲁的答案,因为我认为它可以帮助更多的人,因为它可以在一行中完成所有事情。 – ScoutEU

+1

好的,我可以帮忙,但是如果你的字符串不知道怎么回事不同的长度,因为索引将被抵消或不正确。这种方法更通用 – DarkCygnus

+0

根据您的反馈意见和其他答案扩大我的答案 – DarkCygnus

1

如果你有一个字符串你总是可以通过书写选择它的部分:

富= 'ABCDEFG'

foo2的= foo的[2:4]

打印foo2的

那么输出将是: CD

+0

谢谢你的帮助:) – ScoutEU

+0

没问题,乐意帮忙:) – Mattias

1

尝试此

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

这里是df是dataframe对象。

+0

嘿,先试一试吧,因为它一气呵成。虽然我没有得到任何错误,它也没有做任何事情? for index,rows in time1.iterrows(): s = rows ['Date FY'] time1.loc [index,'Date FY'] ==“”.join(s [2:5] + s [7:]) – ScoutEU

+1

非常感谢:) – ScoutEU

+0

再试一次。我更新了代码。我插入了==而不是'=' – Djokester

2

下面是使用这个样本数据集的另一种方式:

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 
+1

完美。完全按照我的意愿工作! :) – ScoutEU

2

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

很多伟大的答案在这里,非常感谢你的帮助。我已经标记安德鲁斯答案为接受的答案,但真的很感谢您的帮助:) – ScoutEU

+0

@ScoutEU感谢您的评论。请记住,你接受的答案的选择应该是关于你认为最有用的。但这是你的选择......很高兴我能帮上忙。 – piRSquared

+0

好点。我将在标记之前等到帖子更老。谢谢 – ScoutEU

相关问题