如何将字符串从一列拆分为与列表匹配的两列?

穆罕默德·努尔丁

如何将一列中的字符串拆分为与列表从右侧开始完全匹配的两列?如果不匹配,只需将模型列留空

要比较的清单 ['PILOT', 'SRP637', '103', 'Mako', 'Kontiki', 'SKX007', 'Odyssey','Octo', 'Royal Oak Offshore']

数据框

  brand
0 ARCHIMEDE PILOT
1 Seiko SRP637
2 Sinn 103
3 Orient Mako
4 Eterna Kontiki
5 Seiko SKX007
6 Boldr Odyssey
7 Bvlgari Octo
8 Aegir
9 Audemars Piguet Royal Oak Offshore

拆分成这个数据框

  brand           model
0 ARCHIMEDE       PILOT
1 Seiko           SRP637
2 Sinn            103
3 Orient          Mako
4 Eterna          Kontiki
5 Seiko           SKX007
6 Boldr           Odyssey
7 Bvlgari         Octo
8 Aegir
9 Audemars Piguet Royal Oak Offshore
斯科特·波士顿

MCVE

import pandas as pd
from io import StringIO

textfile = StringIO("""
   brand
0  ARCHIMEDE PILOT
1  Seiko SRP637
2  Sinn 103
3  Orient Mako
4  Eterna Kontiki
5  Seiko SKX007
6  Boldr Odyssey
7  Bvlgari Octo
8  Aegir
9  Audemars Piguet Royal Oak Offshore""")

df = pd.read_csv(textfile, sep='\s\s+', engine='python')

print("Input dataframe...\n")
print(df.to_markdown())

listcomp = ['PILOT', 'SRP637', '103', 'Mako', 'Kontiki', 'SKX007', 'Odyssey','Octo', 'Royal Oak Offshore']
regex = f'{"|".join(listcomp)}'
df['model'] = df['brand'].str.extract(f'(?P<model>{regex})')
df['brand'] = df['brand'].str.replace(regex,'')
print("Output dataframe...\n")
print(df.to_markdown())

输出:

Input dataframe...

|    | brand                              |
|---:|:-----------------------------------|
|  0 | ARCHIMEDE PILOT                    |
|  1 | Seiko SRP637                       |
|  2 | Sinn 103                           |
|  3 | Orient Mako                        |
|  4 | Eterna Kontiki                     |
|  5 | Seiko SKX007                       |
|  6 | Boldr Odyssey                      |
|  7 | Bvlgari Octo                       |
|  8 | Aegir                              |
|  9 | Audemars Piguet Royal Oak Offshore |
Output dataframe...

|    | brand           | model              |
|---:|:----------------|:-------------------|
|  0 | ARCHIMEDE       | PILOT              |
|  1 | Seiko           | SRP637             |
|  2 | Sinn            | 103                |
|  3 | Orient          | Mako               |
|  4 | Eterna          | Kontiki            |
|  5 | Seiko           | SKX007             |
|  6 | Boldr           | Odyssey            |
|  7 | Bvlgari         | Octo               |
|  8 | Aegir           | nan                |
|  9 | Audemars Piguet | Royal Oak Offshore |

选项1:

使用 pandas 首先使用 分割空间.str.split,然后使用whereisin

listcomp = ['PILOT', 'SRP637', '103', 'Mako', 'Kontiki', 'SKX007', 'Odyssey','Octo']
df_out = df['brand'].str.split(' ', expand=True).set_axis(['brand', 'model'], axis=1, inplace=False)
df_out['model'] = df_out['model'].where(df_out['model'].isin(listcomp))
df_out

输出:

|    | brand     | model   |
|---:|:----------|:--------|
|  0 | ARCHIMEDE | PILOT   |
|  1 | Seiko     | SRP637  |
|  2 | Sinn      | 103     |
|  3 | Orient    | Mako    |
|  4 | Eterna    | Kontiki |
|  5 | Seiko     | SKX007  |
|  6 | Boldr     | Odyssey |
|  7 | Bvlgari   | Octo    |
|  8 | Aegir     | nan     |

选项 2

将 .str.extract 与命名组一起使用

listcomp = ['PILOT', 'SRP637', '103', 'Mako', 'Kontiki', 'SKX007', 'Odyssey','Octo']
regex = f'{"|".join(listcomp)}'
df['brand'].str.extract(f'(?P<brand>\w+)\s?(?P<model>{regex})?')

输出:

|    | brand     | model   |
|---:|:----------|:--------|
|  0 | ARCHIMEDE | PILOT   |
|  1 | Seiko     | SRP637  |
|  2 | Sinn      | 103     |
|  3 | Orient    | Mako    |
|  4 | Eterna    | Kontiki |
|  5 | Seiko     | SKX007  |
|  6 | Boldr     | Odyssey |
|  7 | Bvlgari   | Octo    |
|  8 | Aegir     | nan     |

选项 3(更新了更改的问题和数据)

listcomp = ['PILOT', 'SRP637', '103', 'Mako', 'Kontiki', 'SKX007', 'Odyssey','Octo', 'Royal Oak Offshore']
regex = f'{"|".join(listcomp)}'
df['model'] = df['brand'].str.extract(f'(?P<model>{regex})')
df['brand'] = df['brand'].str.replace(regex,'')
df

输出:

|    | brand           | model              |
|---:|:----------------|:-------------------|
|  0 | ARCHIMEDE       | PILOT              |
|  1 | Seiko           | SRP637             |
|  2 | Sinn            | 103                |
|  3 | Orient          | Mako               |
|  4 | Eterna          | Kontiki            |
|  5 | Seiko           | SKX007             |
|  6 | Boldr           | Odyssey            |
|  7 | Bvlgari         | Octo               |
|  8 | Aegir           | nan                |
|  9 | Audemars Piguet | Royal Oak Offshore |

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将包含逗号的字符串拆分为另一列?

如何将一列拆分为逗号分隔的字符串?

如何将列中的字符串拆分为行(在两行上,匹配位置)SQL

如何使用熊猫的字符串索引将一列拆分为多列?

Pandas:如何将一列多元组字符串拆分为多列单个元组字符串

如何将字符串拆分为一列并将其与Python中的另一列进行比较

将列表列表内的字符串拆分为两个元素,这些元素保留在同一列表中

如何使用MySQL将整数和字符串从一列分成两列?

如何为熊猫中的每个字符将一列中的字符串拆分为新列

如果另外两个列字符串匹配,如何将一列的值复制到另一列?

如何将一列拆分为多列?

将列中的字符串拆分为两列

将 csv 文件中的一列(字符串)拆分为三列

根据特定字符串将一列拆分为多列

如何将数据框中的每一列拆分为两列?

如何将一列拆分为两列并在Mysql Server中更新

如何将字符串拆分为列表?

如何将unicode字符串拆分为列表

如何将字符串拆分为列表节点?

将包含字符串内列表的数据框列拆分为两列

将两个日期从一列拆分为两个不同的列

如何将单个字符串拆分为两个不同的列sql

如何将一列分为两列?

如何将一列分为两列

Postgresql-将数据从一列拆分为两列

如何将数据帧字符串列拆分为两列?

Specman字符串:如何将字符串拆分为其字符列表?

如何将sql中的字符串拆分为多列

如何将字符串拆分为2D数组行或列?