我的数据框中有一列(称为'FY'),其中的财务年度值格式为:2015/2016
或2016/2017
。Python Pandas - Dataframe专栏 - 将FY格式'2015/2016'转换为'15/16'
我想将整列转换为15/16
或16/17
等。
我假设你不知何故只能从字符串,以及第8和第9个字符中取出第3,第4和第5个字符,但还没有弄清楚如何去做。
任何人都可以帮助我吗?谢谢。
我的数据框中有一列(称为'FY'),其中的财务年度值格式为:2015/2016
或2016/2017
。Python Pandas - Dataframe专栏 - 将FY格式'2015/2016'转换为'15/16'
我想将整列转换为15/16
或16/17
等。
我假设你不知何故只能从字符串,以及第8和第9个字符中取出第3,第4和第5个字符,但还没有弄清楚如何去做。
任何人都可以帮助我吗?谢谢。
给出一个字符串date = "2015/2016"
,你可以做到以下几点得到15/16
:
left, right = date.split('/')
同时捕获独立日期从字符串,删除所有,但最后2个字符:
new_left = left[-2:]
new_right = right[-2:]
new_date = new_left+'/'+new_right
编辑:一个一个班轮解决方案直接与数据帧的工作的基础上,其他答案:
df['new'] = df['fy'].str.split('/')[0][-2:] +'/'+ df['fy'].str.split('/')[1][-2:]
这是一个比较通用的方法,因为它会与不同长度的字符串的工作,并取得只剩下最后2字符,防止不正确的索引错误,并防止你对它们进行硬编码(即使你的日期可能总是有4个字符加上'/',至少在接下来的8,000年内)
尝试此
for index, rows in df.iterrows():
s = rows["FY"]
df.loc[index, "FY"] = "".join(s[2:5] + s[7:])
这里是df
是dataframe对象。
下面是使用这个样本数据集的另一种方式:
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
完美。完全按照我的意愿工作! :) – ScoutEU
选项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
很多伟大的答案在这里,非常感谢你的帮助。我已经标记安德鲁斯答案为接受的答案,但真的很感谢您的帮助:) – ScoutEU
@ScoutEU感谢您的评论。请记住,你接受的答案的选择应该是关于你认为最有用的。但这是你的选择......很高兴我能帮上忙。 – piRSquared
好点。我将在标记之前等到帖子更老。谢谢 – ScoutEU
非常感谢。正如你所说的那样工作。我有upvoted。我希望你不要介意,但我会接受安德鲁的答案,因为我认为它可以帮助更多的人,因为它可以在一行中完成所有事情。 – ScoutEU
好的,我可以帮忙,但是如果你的字符串不知道怎么回事不同的长度,因为索引将被抵消或不正确。这种方法更通用 – DarkCygnus
根据您的反馈意见和其他答案扩大我的答案 – DarkCygnus