【问题标题】:split column regex dataframe python拆分列正则表达式数据框python
【发布时间】:2021-03-23 16:36:32
【问题描述】:

我在数据框中有一列,在某些行中我有州,有时只有城市。例如,在某些行中我只有:'Los Angeles',但在其他行中我可能有'CA Los Angeles'。

我想将该列拆分为两个新列:州和城市,如果未指定州,则可以为空白。像这样的:

COLUMN STATE CITY
FL Miami FL Miami
Houston null Houston

我在想也许可以使用 '[A-Z][A-Z]\s' 之类的正则表达式进行拆分,但我无法使其工作。有什么想法吗?

【问题讨论】:

  • 请将您的数据重新导入 Pandas,并在两个字母状态和城市名称之间使用适当的(非空格)分隔符。

标签: python css regex dataframe split


【解决方案1】:

你可以使用

^(?:([A-Z]{2})\s+)?(.*)

请参阅regex demo。详情:

  • ^ - 字符串开头
  • (?:([A-Z]{2})\s+)? - 可选出现
    • ([A-Z]{2}) - 第 1 组:两个大写 ASCII 字母
    • \s+ - 一个或多个空格
  • (.*) - 第 2 组:除换行符之外的任何零个或多个字符,尽可能多。

如果您使用 Pandas,请使用

df[['STATE','CITY']] = df['COLUMN'].str.extract(r'^(?:([A-Z]{2})\s+)?(.*)', expand=False)

【讨论】:

  • 非常有趣。我正在尝试做同样的事情,但需要使用我的正则表达式中的特定命名组。有可能吗?
  • @RobertAlexander 如果您需要提取单个列,请使用单个未命名的捕获组。
  • 谢谢@Wiktor。事实上,我的正则表达式有两个捕获组 -> REGEX_STR = r"^(?P.+?)\s((?P.+))" 但我发现 Pandas str. extract 函数会自动为每个捕获组创建一个带有其名称的列,因此在我的情况下,这非常有效: df[["primafirma", "gruppo"]] = df["creatore"].str.extract( REGEX_STR, expand =False ) 根据正则表达式将原始组合“creatore”列拆分为两个元素
猜你喜欢
  • 2020-07-22
  • 1970-01-01
  • 2021-10-07
  • 2012-04-20
  • 2021-01-19
  • 2021-04-10
  • 2021-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多