我正在尝试处理非常大的文件(10,000+观察),其中邮政编码不容易格式化.我需要将它们全部转换为前5位数,这是我当前的代码:
def makezip(frame, zipcol):
i = 0
while i < len(frame):
frame[zipcol][i] = frame[zipcol][i][:5]
i += 1
return frame
Run Code Online (Sandbox Code Playgroud)
frame是数据帧,zipcol是包含邮政编码的列的名称.虽然这有效,但处理需要很长时间.有更快的方法吗?
您可以使用.str字符串列上的访问器来访问某些特定的字符串方法.在此,您还可以切片:
frame[zipcol] = frame[zipcol].str[:5]
Run Code Online (Sandbox Code Playgroud)
基于一个小例子,循环遍历行的速度快了约50倍:
In [29]: s = pd.Series(['testtest']*10000)
In [30]: %timeit s.str[:5]
100 loops, best of 3: 3.06 ms per loop
In [31]: %timeit str_loop(s)
10 loops, best of 3: 164 ms per loop
Run Code Online (Sandbox Code Playgroud)
蒙山
In [27]: def str_loop(s):
.....: for i in range(len(s)):
.....: s[i] = s[i][:5]
.....:
Run Code Online (Sandbox Code Playgroud)