我的数据框中有一个专栏(称之为' FY'),其格式为财务年度值:2015/2016
或2016/2017
。
我想转换整个列,以便改为15/16
或16/17
等。
我假设你只是从字符串中取出第3,第4和第5个字符,以及第8和第9个字符,但是我们还没知道如何做到这一点。
有人能帮帮我吗?谢谢。
答案 0 :(得分: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年内)
答案 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
是数据框对象。