列值不在熊猫数据框中的索引中

Posted

技术标签:

【中文标题】列值不在熊猫数据框中的索引中【英文标题】:Column value not in index in padas dataframe 【发布时间】:2021-11-12 01:56:40 【问题描述】:

我正在使用带有named capturing groups 的正则表达式计算数据框中的新列,如下所示:

(df["Address Column"]
.str.extract("(?P<Address>.*\d+[\w+?|\s]\s?\w+\s+\w+),?\s(?P<Suburb>.*$)")
.apply(lambda x: x.str.title()))

但是,在调用新列“Suburb”时,我收到了 KeyError

KeyError: "['Suburb'] not in index"

样本数据:

**Address column**
4a Mcarthurs Road, Altona north
1 Neal court, Altona North 
4 Vermilion Drive, Greenvale
Lot 307 Bonds Lane, Greenvale
430 Blackshaws rd, Altona North 
159 Bonds lane, Greenvale

期望的输出:

Address                   Suburb
4a Mcarthurs Road        Altona North
1 Neal court              Altona North
4 Vermilion Drive          Greenvale
Lot 307 Bonds Lane         Greenvale
430 Blackshaws rd         Altona North
159 Bonds lane              Greenvale

不知道为什么我会得到这个!

对此的任何帮助将不胜感激。

提前感谢您的支持!

【问题讨论】:

请添加您的数据框样本(例如您的 pd.Series 的头部) 您好,用示例数据更新了我的问题 我无法用 pandas v1.2.4 重现您的问题。您使用的是哪个版本? 与 pandas 1.2.3 相同(在 python 中使用 pd.__version__ 检查您的版本) 我的是熊猫 1.2.4 【参考方案1】:

我认为您的问题是您没有将正则表达式查询的结果分配给原始df

以下对我有用:

r = r"(?P<Address>.*\d+[\w+?|\s]\s?\w+\s+\w+),?\s(?P<Suburb>.*$)"
ret = df["Address Column"].str.extract(r).apply(lambda x: x.str.title())
df = pd.concat([df, ret], axis=1)
df["Suburb"]

为了完整起见,这就是我初始化df的方式。

import pandas as pd
s = pd.Series(["4a Mcarthurs Road, Altona north",
               "1 Neal court, Altona North",
               "4 Vermilion Drive, Greenvale",
               "Lot 307 Bonds Lane, Greenvale",
               "430 Blackshaws rd, Altona North",
               "159 Bonds lane, Greenvale"])
df = pd.DataFrame("Address Column": s)

以上代码将AddressSuburb这两个新列添加到df

                 Address Column             Address        Suburb
4a Mcarthurs Road, Altona north   4A Mcarthurs Road  Altona North
     1 Neal court, Altona North        1 Neal Court  Altona North
   4 Vermilion Drive, Greenvale   4 Vermilion Drive     Greenvale
  Lot 307 Bonds Lane, Greenvale  Lot 307 Bonds Lane     Greenvale
430 Blackshaws rd, Altona North   430 Blackshaws Rd  Altona North
      159 Bonds lane, Greenvale      159 Bonds Lane     Greenvale

【讨论】:

嗨,我在“地址列”中有大约 150 个行值。我应该摄取 pd.series 中的所有行值吗?除此之外,我明天和后天可能会有不同的地址。连续吸收新的价值观将是一项乏味的工作。不仅如此,还有其他列(38)需要与我当前的 df 对齐。我怎样才能以更简单的方式做到这一点? @adey27 df 的初始化仅用于演示目的! (我没有你的数据框,所以我必须自己构建一个。)你当然跳过这部分,直接用你的 df 操作。 @adey27 ret = ... 行适合您吗?你看过结果了吗? 是的,我做了那个建议。但在 Suburb 列输出中获得 NaN 是的,KeyError 消失了!从光明的一面看:)

以上是关于列值不在熊猫数据框中的索引中的主要内容,如果未能解决你的问题,请参考以下文章

将列值分配给熊猫数据框中的唯一行[重复]

确定熊猫数据框中的列值何时更改

如何根据在熊猫数据框中的其他列上应用条件来提取列值

从前一行和特定列值有效地更新熊猫数据框中的 NaN

根据列值从熊猫数据框中提取行

在熊猫数据框中使用正则表达式替换列值