在下面的字符串中我想提取siteID(“=”之后的5位数字id)以获取新数据帧中的值,我需要高效的代码,因为我必须执行超过50万行的此任务。
FSP10001GFelt
Label=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013
Label=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3
答案 0 :(得分:1)
正如@Arndt Jonasson所说,你可以使用正则表达式:
import re
my_string = '''FSP10001GFelt
Label=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013
Label=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3'''
re.findall('(?<=SiteID=)\d+', my_string) # returns ['32013', '26241']
答案 1 :(得分:0)
这是通过pandas
的一种方式。我建议你进行基准测试,看看哪种方法能够最好地处理您的数据和设置。
import pandas as pd
from io import StringIO
mystr = StringIO("""FSP10001GFelt
Label=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013
Label=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3""")
# replace mystr with 'file.csv'
df = pd.read_csv(mystr, skiprows=1, usecols=[1], header=None, sep=', ', index_col=False)
res = list(map(int, df[1].str.split('=').str[-1]))
# [32013, 26241]
答案 2 :(得分:0)
由于其灵活性和简单性,我会将RegEx用于此类任务。
这是一个有效的例子:
import re
data = "FSP10001GFelt\nLabel=G_4201_K1108_SHMAIIGNDA_3, SiteID=32013\nLabel=G_MUNUNGA_QUARRY_1, SiteID=26241, LogicRNCID=3"
matches = re.findall(r'.*SiteID=(\d+).*', data)
for match in matches:
print match