将数据帧拆分为多个数据集

2024-10-03 02:47:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,它有索引列和ds_值列,如下面打印的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>

如何查找每行上的每一段类型,并根据为每一段分隔的管道拆分数据行的段类型。段可以是相同的名称,也可以是不同的名称,每个段由~character分隔 在本例中,第一行有SEG1、SEG2和标题
以及第二行的SEG1、SEG24和作业。

每个段可以位于每个数据帧中,例如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 

Tags: 数据testbr名称none类型indextitle
1条回答
网友
1楼 · 发布于 2024-10-03 02:47:22

您可以先按~拆分,然后按|拆分,因此,只要分隔符值以~开头(如果第一个值不是以~开头,则没有问题):

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

在第二行中,我们循环遍历将创建新数据帧的每个组,并通过拆分管道将值扩展为多列。在这一步中,我认为模式在不同的值(相同数量的项)之间是一致的,否则它可能会失败

最后,我们为列表中的所有数据帧放回原始索引

相关问题 更多 >