python - 如何在没有拆分器的情况下拆分等长字符串并扩展数据框
问题描述
我想在没有拆分器的情况下拆分等长字符串并扩展数据框。
这是我正在使用的测试数据框:
sample1 = pd.DataFrame({
'TST': {1: 1535840000000, 2: 1535840000000},
'RCV': {1: 1535840000000, 2: 1535850000000},
'TCU': {1: 358272000000000, 2: 358272000000000},
'SPD': {1: '0', 2: '00000000000000710000007D007C00E2'}
})
如您所见,该SPD
列包含各种长度的字符串,没有任何拆分器。
我想将SPD
每 4 个字符的列拆分为新行,然后将它们扩展到数据框。
TST RCV TCU SPD
0 1535840000000 1535840000000 358272000000000 0000
1 1535840000000 1535840000000 358272000000000 0000
2 1535840000000 1535840000000 358272000000000 0000
3 1535840000000 1535840000000 358272000000000 0071
4 1535840000000 1535840000000 358272000000000 0000
5 1535840000000 1535840000000 358272000000000 007D
6 1535840000000 1535840000000 358272000000000 007C
7 1535840000000 1535840000000 358272000000000 00E2
我尝试使用以下方法首先生成一个系列:
pd.concat([pd.Series(re.findall('....', row['SPD'])) for _, row in sample1.iterrows()]).reset_index()
这使
index 0
0 0 0000
1 1 0000
2 2 0000
3 3 0071
4 4 0000
5 5 007D
6 6 007C
7 7 00E2
但我无法将其扩展回sample1
解决方案
您可以使用str.findall
, 然后repeat
根据 SPD 中的 4 个字符切片的数量使用行。
from itertools import chain
spd4 = df.pop('SPD').str.findall(r'.{4}')
(pd.DataFrame(df.values.repeat(spd4.str.len(), axis=0), columns=df.columns)
.assign(SPD=list(chain.from_iterable(spd4))))
TST RCV TCU SPD
0 1535840000000 1535850000000 358272000000000 0000
1 1535840000000 1535850000000 358272000000000 0000
2 1535840000000 1535850000000 358272000000000 0000
3 1535840000000 1535850000000 358272000000000 0071
4 1535840000000 1535850000000 358272000000000 0000
5 1535840000000 1535850000000 358272000000000 007D
6 1535840000000 1535850000000 358272000000000 007C
7 1535840000000 1535850000000 358272000000000 00E2
推荐阅读
- javascript - 将用户数据保存为来自 Javascript(浏览器)的用户自己的 Gists
- python - 在python中使用scrapy从抓取的数据中删除倒引号
- php - wordpress插件中的多个输入php数组
- calendar - dialong ncurses 日历:如何删除周数列
- java - JBehave 测试异常
- mysql - 使用 LEFT JOIN 更新
- amazon-web-services - 如何创建角色到认知池?
- android - 我想在 jetpack compose 中添加视差效果
- r - 如何在 flextable 中按行(不是整列)使用条件格式
- c# - 无法解析“kafka:9092”:名称解析暂时失败