regex 在Dataframe中将单个列拆分为4个不同的单独列

daolsyd0  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(119)

我只需要将一列 Dataframe 拆分为4个不同的列。我尝试了几个步骤,但没有工作。
数据1:

Dump               
12525 2 153 89-8 Winch
24798 1 147 65-4 Gear
65116 4          Screw 
46456 1          Rowing
46563 5          Nut

预期值1:

Item  Qty  Part_no    Description             
12525  2    153 89-8   Winch
24798  1    147 65-4     Gear
65116  4               Screw 
46456  1               Rowing
46563  5               Nut

数据2:

Dump               
12525 2 153 89-8 Winch Gear
24798 1 147 65-4 Gear nuts
65116 X          Screw bolts
46456 1          Rowing rings
46563 X          Nut

预期2:

Item  Qty  Part_no    Description             
12525  2    153 89-8   Winch Gear
24798  1    147 65-4   Gear nuts
65116  X               Screw bolts
46456  1               Rowing rings
46563  X               Nut

我尝试了下面的代码

data_df[['Item','Qty','Part_no','Description']] = data_df["Dump"].str.split(" ", 3, expand=True)

and got the output like 

 Item  Qty  Part_no  Description             
12525  2    153 89-8   Winch
24798  1    147 65-4   Gear
65116  4    Screw 
46456  1    Rowing
46563  5    Nut

此外,我尝试使用此代码,但没有得到预期的输出:

data_df[['Item','Qty','Part_no','Description']] = data_df['Dump'].str.extract(r'(\d+)\s+(\S+)\s+(\d*)\s*(.+)$')

有什么建议吗,我怎么能解决这个问题?
类似于这个问题:Split the single column to 4 different columns in Dataframe

yhxst69z

yhxst69z1#

可以匹配捕获组中Part_no列的数据格式,并使该组中的数据可选,以保留4列。

(\d+)\s+(\S+)\s+((?:\d+\s+\d+-\d+)?\s*)(.+)$

Regex demo
具有命名捕获组和str.extractall的示例

import pandas as pd

pattern = r'(?m)(?P<Item>\d+)\s+(?P<Qty>\S+)\s+(?P<Part_no>(?:\d+\s+\d+-\d+)?\s*)(?P<Description>.+)$'
items = [("12525 2 153 89-8 Winch Gear\n"
          "24798 1 147 65-4 Gear nuts\n"
          "65116 X          Screw bolts\n"
          "46456 1          Rowing rings\n"
          "46563 X          Nut  ")]

data_df = pd.DataFrame(items, columns=["Dump"])
res = data_df['Dump']\
    .str\
    .extractall(pattern)\
    .fillna('')

print(res)

输出量

Item Qty    Part_no   Description
  match                                    
0 0      12525   2  153 89-8     Winch Gear
  1      24798   1  147 65-4      Gear nuts
  2      65116   X              Screw bolts
  3      46456   1             Rowing rings
  4      46563   X                    Nut

相关问题