我的数据是一个熊猫数据框,看起来像这样:
ALB_1ABCD2_1 ABCD3_1 AB_1 AB_2
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
ALB*000051 ABCB4*000050 ADH4*000131 ALB*000062
从*开始,我想在每两个字符(数字)之间添加冒号。所以我希望每个数据看起来像ALB * 00:00:51或ABCB4 * 00:00:50。
最Python简洁的方法是什么?
编辑:这是我用来尝试获得所需输出的代码。
for column in df_new3.columns[2:]:
df_new3[column] = df_new3[column].str.replace("+","*")
for data_str in df_new3[column]:
start_loc = data_str.find('*') + 1
former_half = data_str[:start_loc]
latter_half = ":".join(data_str[i:i+2] for i in range(start_loc, len(data_str), 2))
full = former_half + latter_half
data_str = full
print(full)
我似乎无法使“ data_str = full”行正常工作-print(full)似乎以我想要的格式返回数据,但是我希望用新格式化的格式替换数据框中的值价值观。
答案 0 :(得分:0)
定义您自己的函数并将此处的时间转换为时间格式,我不使用apply,因为您有一些损坏的数据,例如000062
def yourfunc(x):
x=x.str.split('*',expand=True)
x[1]=pd.to_datetime(x[1],format='%H%M%S').dt.strftime('%H:%M:%S')
return x.apply('*'.join,1)
for x in df:
df[x]=yourfunc(df[x])
df
Out[308]:
ALB_1ABCD2_1 ABCD3_1 AB_1 AB_2
0 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
1 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
2 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
3 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
4 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
5 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
6 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
7 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
8 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*000062
答案 1 :(得分:0)
使用正则表达式将星号(最后一个除外)之后的每一对数字替换为同一对数字和一个冒号:
for col in df:
df[col] = df[col].str.replace(r"\\*(\d{2}(?!$))", r"\1:")
# ALB_1ABCD2_1 ABCD3_1 AB_1 AB_2
#0 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*00:00:62
#1 ALB*00:00:51 ABCB4*00:00:50 ADH4*00:01:31 ALB*00:00:62
"(?!$)"
被称为负向超前,意思是“除了最后一个。”