繁体   English   中英

If语句删除和替换字符串

[英]If statement to remove and replace a string

我试图删除一个字符串的一部分,使其变强,以便它可以成为一个整数。 虽然,我还需要考虑字符串的变化。

我试图把它放到一个函数中; 这是我所做的:

import numpy as np

def rem(x):
    data = []
    for i in x:
        if "m" in i:
            data.append(i.replace(".00m", '000000'))
        elif "Th" in i:
            data.append(i.replace("Th.", '000'))
    return data
    
data_array = np.array(['£67.50m', '£63.00m', '£49.50m','£90Th.', '£720Th.'], dtype=object)

rem(data_array)
>['£67.50m', '£63000000', '£49.50m', '£90000', '£720000']

我将如何考虑在m之前我也会有 0-9 的数字?

我在更大的数据框中尝试过这个,但出现以下错误:

类型错误:“float”类型的参数不可迭代

我假设这是因为该功能没有考虑.50m, .20m ...

使用@Ptit Xav 建议:

def rem(x):
    data = []
    for i in x:
        if "m" in i:
            xi = re.sub("[^\d]", "", i)
            data.append(int(xi)*10000)
        elif "Th" in i:
            hi = re.sub("[^\d]", "", i)
            data.append(int(hi)*1000)
    return data

您可以使用包re的替换方法sub

import numpy as np
import re

def rem(x):
    data = []
    for i in x:
        if "m" in i:
            data.append(re.sub("(\.\d+m)", '000000', i))
        elif "Th" in i:
            data.append(i.replace("Th.", '000'))
    return data

我替换了这个代码:

data.append(i.replace(".00m", '000000'))

和:

data.append(i.split(".")[0] + "000000")

输出代码为:

>['£67000000', '£63000000', '£49000000', '£90000', '£720000']

随着转换:

if "m" in i:
    xi = re.sub("[^\d.]", "", i)
    data.append("{}{:.0f}".format(i[0],float(xi)*1000000))
elif "Th" in i:
    hi = re.sub("[^\d.]", "", i)
    data.append("{}{:.0f}".format(i[0],float(hi)*1000))

我认为你可以用正则表达式替换if "m" in i:elif "Th" in i:使它更健壮一些。

import re
import warnings
import numpy as np

RE_ENDS_M = re.compile('\.(\d{2})m$')
RE_ENDS_TH = re.compile('Th\.$')

def rem(x):
    data = []
    for i in x: 
        if RE_ENDS_M.search(i):
            data.append(re.sub(RE_ENDS_M, "\g<1>0000", i))
        elif RE_ENDS_TH.search(i):
            data.append(re.sub(RE_ENDS_TH, '000', i))
        else:
            warnings.warn("Ignoring data: %s" % i) 
    return data
    
data_array = np.array(
    ['£67.50m', '£63.00m', '£49.50m','£90Th.', '£720Th.', '1€50'],
    dtype=object
)

print(rem(data_array))

# Outputs:
# UserWarning: Ignoring data 1€50
#  warnings.warn("Ignoring data %s" % i)
# ['£67500000', '£63000000', '£49500000', '£90000', '£720000']


暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM