在Pandas中更快地处理Dataframe

wha*_*iam 4 python pandas

我正在尝试处理非常大的文件(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是包含邮政编码的列的名称.虽然这有效,但处理需要很长时间.有更快的方法吗?

jor*_*ris 7

您可以使用.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)