首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让pandas行处理更快?

如何让pandas行处理更快?
EN

Stack Overflow用户
提问于 2020-11-11 14:23:08
回答 1查看 109关注 0票数 1

我有600个csv文件,每个文件包含大约1500行数据。我必须对每一行数据运行一个函数。我已经定义了函数。

代码语言:javascript
复制
def query_prepare(data):
   """function goes here"""
   """here input data is list of single row of dataframe""" 

上述函数基于条件执行某些功能,如strip()replace()。上面的函数将每一行数据作为列表。

data = ['apple$*7','orange ','bananna','-']

这是我的初始数据帧外观

代码语言:javascript
复制
         a            b       c          d
  0     apple$*7     orange   bananna    -
  1     apple()*7    flower]  *bananna  -

我用函数检查了0.04s需要处理的一行数据。如果我在一个包含1500行数据的csv文件上运行它,它几乎需要1500*0.04s。我已经尝试了一些方法……

代码语言:javascript
复制
# normal in built apply function
t = time.time()
a = df.apply(lambda x: query_prepare(x.to_list()),axis=1)
print('time taken',time.time()-t)

# time taken 52.519816637039185



# with swifter
t = time.time()
a = df.swifter.allow_dask_on_strings().apply(lambda x: query_prepare(x.to_list()),axis=1)
print('time taken',time.time()-t)

# time taken 160.31028127670288


# with pandarallel
pandarallel.initialize()
t = time.time()
a = df.parallel_apply(lambda x: query_prepare(x.to_list()),axis=1)
print('time taken',time.time()-t)

# time taken 55.000578

我用我的query_prepare函数做了所有的事情来减少时间,所以没有办法改变或修改它。还有其他的建议吗?

顺便说一下,我在google colab上运行它

编辑:如果我们有1500行数据,将其分成15行,然后应用函数。如果我们这样做,我们能把时间减少15倍吗?(很抱歉,我不确定这是不是可能,或者没有以一种好的方式指导我)

EN

回答 1

Stack Overflow用户

发布于 2020-11-11 15:05:20

例如,您可以大致执行以下操作:

代码语言:javascript
复制
def sanitize_column(s: pd.Series):
    return s.str.strip().str.strip('1234567890()*[]')

然后你可以这样做:

代码语言:javascript
复制
df.apply(sanitize_column, axis=0)

通过以下方式:

代码语言:javascript
复制
df = pd.DataFrame({'a': ['apple7', 'apple()*7'], 'b': ["    asd   ", ']asds89']})

这将给出

代码语言:javascript
复制
       a     b
0  apple   asd
1  apple  asds

这应该比你的解决方案更快。为了进行适当的基准测试,我们需要您的完整解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64781465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档