热线电话:13121318867

登录
2019-03-04 阅读量: 843
快速分割str

我想组合两个int列来创建一个新的点分隔str列。

df3 = pd.DataFrame({'job_number': [3913291, 3887250, 3913041],

'task_number': [38544, 0, 1]})

df3['filename'] = df3['job_number'].astype(str) + '.' + df3['task_number'].astype(str)

0 3913291.38544

1 3887250.0

2 3913041.1

但是,当我包含点分隔符时,我收到一个错误:

df3['job_number'].values.astype(int).astype(str) + '.' + df3['task_number'].astype(int).astype(str)

TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U11') dtype('<U11') dtype('<U11')

我想要的结果是:

0 3913291.38544

1 3887250.0

2 3913041.1

解决办法:

方法1

要添加包含的虚拟列.,请在处理中使用它,然后将其删除:

%%timeit

df3['dummy'] ='.'

res = df3['job_number'].values.astype(str) + df3['dummy'] + df3['task_number'].values.astype(str)

df3.drop(columns=['dummy'], inplace=True)

1.31 ms ± 41.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

对于方法1的扩展,如果你排除创建虚拟列的处理时间并删除它,那么它是你得到的最好的 -

%%timeit

df3['job_number'].values.astype(str) + df3['dummy'] + df3['task_number'].values.astype(str)

286 µs ± 15.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

方法2

使用 apply

%timeit df3.T.apply(lambda x: str(x[0]) + '.' + str(x[1]))

883 µs ± 22 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

35.9160
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子