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

我正在处理一个具有价格列的大型数据集(超过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


谢谢!


森栏
浏览 134回答 3
3回答

喵喵时光机

正如米尼奥所建议的那样,使用正则表达式删除它们。编码和阅读的一种简单方法是使用,这意味着所有非数字字符:\Dregex = r'\D' df.price = df.price.str.replace(regex, '').astype(float)

白衣非少年

你可以尝试这样的事情:df.price.str.replace(r'(\.)([0-9]{1,2})$', ',\\2')也许你将不得不使用正则表达式部分,但这个函数是一种方法。

胡子哥哥

在您的情况下,对何时删除点以及何时应将点视为小数点存在疑问。我对这个问题的解决方案是删除所有点,然后在一千个点之后出现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 retoutput = pd.Series(map(func,cell))output = output.astype('float')print(output)如果您遇到任何其他问题,可以写信给我。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python