我有大量数据,我想实现以下操作但需要太多时间。我该如何优化它?

Posted

技术标签:

【中文标题】我有大量数据,我想实现以下操作但需要太多时间。我该如何优化它?【英文标题】:I have a large set of data, i want to realize the following action but takes too much time. How can I optimize it? 【发布时间】:2019-05-06 10:25:45 【问题描述】:

我正在处理一组数据,我需要在400.000 行附近清理一下,

两个动作: - Resale Invoice Month 是字符串M201705,我想创建一个名为 Year 在这种情况下只有年份 2017

一些商业产品也是字符串,以TR结尾,我想从这些产品中删除TR。例如M23065TR 我想在M23065 中更改这种情况下的所有产品,但是在列中也有已经很好的产品名称M340767 例如 我的代码就在下面,它需要超过2h 才能运行,你有一个解决方案来简化它,这样它需要更少的时间。 非常感谢
for i in range(Ndata.shape[0]):
    Ndata.loc[i,'Year']=Ndata.loc[i,'Resale Invoice Month'][1:5]
    if (Ndata['Commercial Product Code'][i][-2:]=='TR')==True:
        Ndata.loc[i,'Commercial Product Code']=Ndata.loc[i,'Commercial Product Code'][:-2]

【问题讨论】:

你能提供一个minimal reproducible example吗? 【参考方案1】:

当使用pandas时,总是尝试向量化,而不是使用循环。

你可以这样做:

# for Year
NData['Year'] = Ndata['Resale Invoice Month'].str[1:5]

# remove trailing TR, only row have it
idx = Ndata['Commercial Product Code'].str[-2:]=='TR'
Ndata.loc[idx, 'Commercial Product Code'] = Ndata[idx].str[:-2]

【讨论】:

可能是:Ndata['Commercial Product Code'] = Ndata['Commercial Product Code'].str.replace('TR','') 嗨@hunzter,感谢您的回答。它似乎不起作用。我有一个错误告诉:... 嗨@Rickou95 有一个语法错误,我已经解决了。必须是Ndata['Commercial Product Code'].str,而不是Ndata.str['Commercial Product Code']

以上是关于我有大量数据,我想实现以下操作但需要太多时间。我该如何优化它?的主要内容,如果未能解决你的问题,请参考以下文章

查询Hive处理的大量数据

我想用facebook php sdk发布通知,我该怎么做?

提取大文件清单需要太多时间

MacOs - 解压缩大量.gz文件

如果我想建立一个自定义数据库,我该怎么做? [关闭]

MySQL--查询性能优化