Python:在Pandas中替换字符串的有效方法是什么

2024-09-28 20:54:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大数据集~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,但还是太慢了。在

  • 有没有更好(更有效)的方法在大量行上执行pandas replace?在
  • if语句的函数是否更明智,然后使用 df.apply(function)?在
  • 还是我错过了什么?在

样本集如下所示:

^{pr2}$

显然,这个集合太小,无法完全复制时间问题。在

对于这种情况,四次运行的结果是:tf = 0.00300002tf = 00299978tf = 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.0019998tf = 0.00200009tf = 0.00200009,和{}

因此,看起来replace的列表版本更快,但在大型数据集上仍然很慢。有什么想法吗?在


Tags: of数据truedftimetfreplaceca
1条回答
网友
1楼 · 发布于 2024-09-28 20:54:47

对于存在于DataFrame上的大多数方法,有一个序列等价物可以在列上工作。0.18的文档中似乎还没有这方面的内容。在

这对我很有效:

df['CTRY_NM'].replace(to_replace=['^b','^c'], value=['America','Bahamas'], regex=True )

应该至少快一点?在

相关问题 更多 >