我需要转换一个列('Price'),它可能有多个数值的价格(例如,500 -750美元)。我需要提取这些数据并找到它们的平均值,不包括日历年(例如2019年)。有时值包括字符串(例如,USD 500),有时为空白,有时仅为数字(例如500)。
目前,我是这样做的:
s=df['Price'].str.findall('\d+')
df['Price'] = s.apply(lambda x: np.mean([float(i) for i in x if int(i)<2000]))
但是,这只适用于值中有字符串的情况(例如:USD 500),并且不适用于空白或仅适用于数字(例如,500)。
我如何修改它,使其适用于任何类型?
谢谢
编辑:示例:
df = pd.DataFrame({
"Price": ["Above Market Price", "USD200K as an initial price", "USD310K to 360K.", 300000, "", "150,000"]
前三个可以,后三个不行。
如果我只有前3个,输出将是:
df = pd.DataFrame({
"Output": ["", 200, 335]
但是如果你加上最后3个,它就不起作用了。
最终预期输出,但我不需要最后3除以3,我只需要克服代码不能处理空白的障碍,如果它只是数字,目前它只在代码中有字符串时才有效:
df = pd.DataFrame({
"Output": ["", 200, 335, 300, "", 150]
2条答案
按热度按时间eni9jsuy1#
使用复杂替换(
str.replace
)和正则表达式匹配(str.findall
):2nbm6dog2#
下面是一个使用正则表达式提取的向量化方法。我假设那个逗号是千位分隔符。
此格式具有已提取值的原始索引,具有未提取值的间隙。