如何在 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】:假设您的列是一个名为 series
的 pandas.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.split
和str.join
# Note that I limit this to 3 splits with this
# ↓
['-'.join(x.split('-', 3)[:3]) for x in series]
这很好。
【讨论】:
以上是关于如何在 Python 中拆分字段并在另一列中返回值?的主要内容,如果未能解决你的问题,请参考以下文章