Pandas中Dataframe的更快处理

5

我正在尝试处理非常大的文件(10,000+观测),其中邮政编码不容易格式化。 我需要将它们全部转换为只有前5个数字,并且这是我的当前代码:

def makezip(frame, zipcol):
    i = 0
    while i < len(frame):
        frame[zipcol][i] = frame[zipcol][i][:5]
        i += 1
    return frame

frame是数据帧,zipcol是包含邮政编码的列的名称。虽然这样做是可行的,但处理时间非常长。有更快的方法吗?


你需要避免使用for循环,而是使用“apply”方法。请参见https://dev59.com/T2sz5IYBdhLWcg3wiISe - vmg
1个回答

7
你可以使用.str访问器来访问一些特定的字符串方法。并且在此基础上,你也可以进行切片操作:
frame[zipcol] = frame[zipcol].str[:5]

基于一个小例子,这种方法的速度比逐行循环快了大约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

whith

In [27]: def str_loop(s):
   .....:     for i in range(len(s)):
   .....:         s[i] = s[i][:5]
   .....:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接