使用正则表达式从python的数据框中提取街道地址中的街道编号

时间:2019-10-20 18:49:37

标签: python-3.x pandas dataframe

d1 = dataset['End station'].head(20)

for x in d1:
    x = re.compile("[0-9]{5}")

print(d1)

使用dataset['End_Station'] = dataset['End station'].map(lambda x: re.compile("([0-9]{5})").search(x).group())

节目-TypeError: expected string or bytes-like object. 我是数据分析的新手,想不出其他任何方法

1 个答案:

答案 0 :(得分:0)

Pandas 有自己的有关 Regex 的方法,因此采用“更多pandasonic”方式 编写代码只是为了使用它们,而不是原生的 re 方法。

考虑这样的源数据示例:

                      End station
0    4055 Johnson Street, Chicago
1  203 Mayflower Avenue, Columbus

要在上述地址中找到街道编号,请运行:

df['End station'].str.extract(r'(?P<StreetNo>\d{,5})')

您将获得:

      StreetNo
0     4055
1      203

请注意,街道编号可能比5位数字,但是您尝试 以匹配仅 5 个数字的序列。

代码中的另一个怪异点:为什么要在循环中编译正则表达式 然后不使用它们?

编辑

更仔细地查看您的代码后,我还有另外两句话。

写时:

for x in df:
    ...

然后,该循环实际上在列名(而不是行)上进行迭代。

代码中的另一个怪异点是 x 变量,最初用于保存 列名,您再次使用将已保存的正则表达式保存在那里。 这是个坏习惯。变量应用于清楚地保存一个 每个对象中定义的对象。

就行迭代而言,您可以使用例如

for idx, row in df.iterrows():
    ...

但是请注意,行列会返回由以下内容组成的

  • 当前行的索引,
  • 行本身。

然后(在循环中)您可能会引用此行的各个列。