为了账号安全,请及时绑定邮箱和手机立即绑定

删除熊猫列中字符串中的特定字符

删除熊猫列中字符串中的特定字符

森栏 2022-10-05 09:23:43
我正在处理一个具有价格列的大型数据集(超过200万行x 10列)。这些值的格式包括一千点分隔符(例如 1.000),并且还使用点来分隔小数(例如 3.000.75 而不是 3000,75)。我想将列的格式设置为 float,但值中的 2 个点让我头疼。通常,为了简单起见,假设没有超过1.000.000的数字,我会做这样的事情for i in range (0,len(df)):    cell=str(df.iloc[i]['price'])    if cell.count(".")==2:        cell=cell.split(".")[0] + cell.split(".")[1] + '.' + cell.split(".")[2]然后,是的,将列的格式设置为浮点数。但我知道这远非最优(循环)。for我怎样才能利用熊猫的力量来避免这里?for谢谢!
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

正如米尼奥所建议的那样,使用正则表达式删除它们。编码和阅读的一种简单方法是使用,这意味着所有非数字字符:\D

regex = r'\D'
df.price = df.price.str.replace(regex, '').astype(float)


查看完整回答
反对 回复 2022-10-05
?
白衣非少年

TA贡献1155条经验 获得超0个赞

你可以尝试这样的事情:

df.price.str.replace(r'(\.)([0-9]{1,2})$', ',\\2')

也许你将不得不使用正则表达式部分,但这个函数是一种方法。


查看完整回答
反对 回复 2022-10-05
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

在您的情况下,对何时删除点以及何时应将点视为小数点存在疑问。我对这个问题的解决方案是删除所有点,然后在一千个点之后出现s,并保持小数点不变。下面的代码可能会对您有所帮助。


cell = df['price']

cell = cell.astype('str')


def func(val):

    ret = ''

    for i in range(len(val)):

        if val[i] != '.' or i%4 != 0:

            ret += val[i]       


    return ret


output = pd.Series(map(func,cell))


output = output.astype('float')

print(output)

如果您遇到任何其他问题,可以写信给我。


查看完整回答
反对 回复 2022-10-05
  • 3 回答
  • 0 关注
  • 91 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号