我有一个大数据集~1GB,有~1400万行。我想清理国家名称;也就是说,将CA
替换为CANADA
。在
我试过了:
mttt_pings.replace(['^CA$', '^US$', '^UNITED STATES$', '^MX$', '^TR$', 'GB',
'^ENGLAND$', '^AU$', '^FR$', '^KOREA, REPUB OF$',
'^CONGO, DEM REP.$', '^SYRIA$', '^DOMINICAN REP.$',
'^RUSSIA$', '^TAIWAN$', '^UAE$', '^LIBYA$'],
['CANADA', 'UNITED STATES OF AMERICA',
'UNITED STATES OF AMERICA', 'MEXICO', 'TURKEY',
'UNITED KINGDOM', 'UNITED KINGDOM', 'AUSTRALIA', 'FRANCE',
'KOREA, REPUBLIC OF', 'CONGO', 'SYRIA ARAB REPUBLIC',
'DOMINICAN REPUBLIC', 'RUSSIA FEDERATION',
'TAIWAN, PROVINCE OF CHINA', 'UNITED ARAB EMIRATES',
'LIBYAN ARAB JAMAHIRIYA'],
regex = True, inplace = True)
这甚至不是完整的替换列表只是一个子集。在我退出程序之前,这个过程持续了30分钟。在
然后我试着写个人replaces
,但还是太慢了。在
df.apply(function)
?在样本集如下所示:
^{pr2}$显然,这个集合太小,无法完全复制时间问题。在
对于这种情况,四次运行的结果是:tf = 0.00300002
,tf = 00299978
,tf = 0.00200009
,和{
import time
import pandas as pd
t0 = time.time()
df = pd.DataFrame({'ser_no': [1, 1, 1, 2, 2, 2, 2, 3, 3, 3],
'CTRY_NM': ['a', 'a', 'b', 'e', 'e', 'a', 'b', 'b', 'b', 'd']})
df.replace(['^a$', '^b$', '^c$', '^d$', '^e$'],
['America', 'Bahamas', 'Congo', 'Dominican Republic', 'Europe'],
regex = True, inplace = True)
tf = time.time()
total = tf - t0
这里我们得到tf = 0.0019998
,tf = 0.00200009
,tf = 0.00200009
,和{
因此,看起来replace的列表版本更快,但在大型数据集上仍然很慢。有什么想法吗?在
对于存在于DataFrame上的大多数方法,有一个序列等价物可以在列上工作。0.18的文档中似乎还没有这方面的内容。在
这对我很有效:
df['CTRY_NM'].replace(to_replace=['^b','^c'], value=['America','Bahamas'], regex=True )
应该至少快一点?在
相关问题 更多 >
编程相关推荐