[英]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.