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.
我是数据分析的新手,想不出其他任何方法
答案 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():
...
但是请注意,行列会返回由以下内容组成的对:
然后(在循环中)您可能会引用此行的各个列。