如何解决将数据帧拆分为多个数据集
我有一个数据框,它有索引列和 ds_value 列,就像下面打印的 df
index ds_value <br>
1 SEG1|CA|90025|34|~SEG2|2|3|10150|~TITLE|Test| <br>
2 SEG1|NV|90567|50|~SEG24|4|5|54678|~JOB|None|<br>
如何找到每一行上的每个段类型,并根据为每个段分隔的管道分割数据行的段类型。段可以是相同的名称,也可以是不同的名称,每个段由 ~ 字符分隔
在这种情况下,我在第一行有 SEG1、SEG2 和 TITLE
和第二行的 SEG1、SEG24 和 JOB。
每个 Segment 可以在每个数据帧中,例如 Df1、df2、df3...等,因为我会将这些数据帧插入到 sql server
请帮助我
这是我期待的
df1: SEG1 <br>
index 0 1 2 3 <br>
1 SEG1 CA 90025 34 <br>
2 SEG1 NV 90567 50 <br>
df2 : SEG2<br>
index 0 1 2 3 <br>
1 SEG2 2 3 10150<br>
df3 : TITLE<br>
index 0 1 <br>
1 TITLE Test <br>
df4 : SEG24<br>
index 0 1 2 3 <br>
2 SEG24 4 5 54678 <br>
df5 : JOB<br>
index 0 1 <br>
2 JOB None
解决方法
您可以先按 ~
分割,然后按 |
分割,因此分割值的数量无关紧要,只要分隔符值以 ~
开头(不是如果第一个不以 ~
开头,则会出现问题:
s = df.ds_value.apply(lambda x: [x.strip('|') for x in x.split('~')])
dfs = [s.str[i].str.split('|',expand=True) for i in range(len(s[0]))]
# Set the original index for each dataframe
for d in dfs:
d.index = df.index
dfs
的输出(数据框列表):
[
0 1 2 3
index
1 SEG1 CA 90025 34
2 SEG1 NV 90567 50,0 1 2 3
index
1 SEG2 2 3 10150
2 SEG2 4 5 54678,0 1
index
1 TITLE Test
2 TITLE None
]
说明:
在此代码的第一行中,您将获得一系列由 ~
分割的元素(还使用 strip
删除了不必要的末端管道):
0 [SEG1|CA|90025|34,SEG2|2|3|10150,TITLE|Test]
1 [SEG1|NV|90567|50,SEG2|4|5|54678,TITLE|None]
Name: ds_value,dtype: object
在第二行中,我们循环遍历将创建新数据帧的每个组,并通过拆分管道将值扩展为多列。在这一步中,我已经考虑到模式在值之间(相同数量的项目)是一致的,否则可能会失败。
最后,我们放回了列表中所有数据帧的原始索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。