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