如何在 Python 中拆分字段并在另一列中返回值?

Posted

技术标签:

【中文标题】如何在 Python 中拆分字段并在另一列中返回值?【英文标题】:How to split a field within Python and return value in another column? 【发布时间】:2020-04-19 08:13:39 【问题描述】:

我有一个包含如下数据的 csv:

"A17W-1000010931-RED-14"

我正在尝试按第三个连字符拆分数据,以便它返回之前的所有内容,如下所示:

"A17W-1000010931-RED"

这很可能是一项简单的任务,但我正在努力寻找答案。

非常感谢。

【问题讨论】:

您的数据是否在 pandas DataFrame 中? 【参考方案1】:

你可以使用.replace:

df["your column"] = df["your column"].replace(
    r"(.*)-(.*)-(.*)-.*", "\\1-\\2-\\3", regex=True
)

【讨论】:

【参考方案2】:

一些用于 Python 的通用字符串操作方法。可能 pandas 有更好的东西。

>>> import re
>>> re.findall("^[^-]*-[^-]*-[^-]*", "A17W-1000010931-RED-14")[0]
'A17W-1000010931-RED'

另一种方式:

>>> "-".join("A17W-1000010931-RED-14".split("-")[:3])
'A17W-1000010931-RED'

【讨论】:

【参考方案3】:

你可以试试这个

string= "A17W-1000010931-RED-14"
es=string.split("-")[:3]
jes='-'.join(es)
merge='"'+jes+'"'

如果您的打印合并,它将向您显示所需结果的输出

【讨论】:

【参考方案4】:

假设您的列是一个名为 seriespandas.Series 对象

series = pd.Series(["A17W-1000010931-RED-14", 'ABC-123-COLOR-Other-Stuff'] * 2)
series

0       A17W-1000010931-RED-14
1    ABC-123-COLOR-Other-Stuff
2       A17W-1000010931-RED-14
3    ABC-123-COLOR-Other-Stuff
dtype: object

str.find、字符串切片和list理解

[x[:x.find('-', x.find('-', x.find('-') + 1) + 1)] for x in series]

['A17W-1000010931-RED',
 'ABC-123-COLOR',
 'A17W-1000010931-RED',
 'ABC-123-COLOR']

详情

我正在尝试尽量减少新对象的创建。

查找'-' 的第一个位置并添加一个

x.find('-') + 1

我们可以将起始位置传递给str.find,以便它只搜索某个点...就像第一个'-' 所在的位置一样。但以上正是我想开始寻找第二个'-'的起点

x.find('-', x.find('-') + 1) + 1

重复该过程以找到第三个

x.find('-', x.find('-', x.find('-') + 1) + 1)

现在我有了位置,我们可以轻松地对字符串进行切片

x[:x.find('-', x.find('-', x.find('-') + 1) + 1)]

另一种方法是str.splitstr.join

# Note that I limit this to 3 splits with this
#                      ↓
['-'.join(x.split('-', 3)[:3]) for x in series]

这很好。

【讨论】:

以上是关于如何在 Python 中拆分字段并在另一列中返回值?的主要内容,如果未能解决你的问题,请参考以下文章

在另一列上查找最近的时间戳并在新列中添加值 PySpark

在行值更改后,在另一列中返回一行

SQLite 在另一列的值上拆分列

在另一列中使用一列中的值

TSQL - 如何在另一列中提取具有最小值和最大值的列

如何在保持在另一列范围内的同时锻炼列中两个值之间的差异?