【问题标题】:python - removing whitespaces not working - encoding issue?python - 删除空格不起作用 - 编码问题?
【发布时间】:2022-01-18 12:54:01
【问题描述】:

我有一个数据集,其中包含从房地产代理处抓取的数据。 我想从特殊字符(€、m² 等)中清除变量,删除空格并将它们转换为整数。 例如,我有这些价格(Prix de vente)和尺寸(Surface habitable):

我设法使用以下内容从价格变量中去除“€”:

data["Prix de vente"] = data["Prix de vente"].str.strip("€")

但是这两种技术都不能去除空格

data["Prix de vente"] = data["Prix de vente"].str.strip() 
data["Prix de vente"] = data["Prix de vente"].replace(" ","")

我一直有:

      540 000
      900 000
      890 000
      900 000
      900 000
      ...

我感觉这是由于我的数据的编码方式造成的。那会是问题吗?如果是这样,我该如何处理? 我正在使用 jupyter 笔记本。

【问题讨论】:

  • 仅使用数据图像来重现该行为相当困难...您能否提供可以复制/粘贴的已保存 csv 文件的内容?
  • 看起来您的数字实际上可能是两个单独的字符串 - 也许尝试将它们连接起来?
  • 替换是可以的,但是你需要从你的表中复制空格字符:它不是标准空格,而是一个不间断的空格(你不应该在数字之间换行,并且可能在单位和数量)。
  • @FlyingTeller,很高兴发送示例,但我不知道如何发送?看来我们不能通过 stackoverflow 共享数据集...

标签: python character-encoding strip


【解决方案1】:

你可以的

data["Prix de vente"] = data["Prix de vente"].str.replace("\s","", regex=True)

匹配"\s" 结合regex=True 而不是" " 确保不仅匹配常规空格而且匹配any whitespace character

更多背景:

你的第一种方法

data["Prix de vente"] = data["Prix de vente"].str.strip()

不起作用,因为.strip() 只删除前导和尾随字符。

你的第二种方法

data["Prix de vente"] = data["Prix de vente"].replace(" ","")

不起作用,因为它使用的不是 str.replace,而是 pd.Series.replace,它只替换完全匹配的值(例如“900 000”)。

【讨论】:

  • 感谢您的回答。不幸的是,它也不起作用。我一直有那个空白......
  • 那么确实你有一个非标准的空间,你可以尝试通过匹配“\s”来匹配所有的空格。我调整了答案
  • 谢谢!!完美运行!
【解决方案2】:

有通常的方式(但丑陋):

data["Prix de vente"] = "".join(data["Prix de vente"].str.split())

它是如何工作的?

字符串方法split() 将在空格上分割字符串。通用空格,所以不仅仅是" ",还有"\t""\u00a0"等。 然后你再次加入子字符串,没有任何空格。 所以你删除了空格(以一种不太直观的方式,但这种方法经常使用,有时只是为了规范化空格)。

为什么这有效,但不是您的解决方案?

一些语言环境使用 NBSP(非换行空格,\u00A0)而不是标准空格来编写数字和货币,这更明智(避免在十位数字组之间换行)。此外,一些格式化程序可能会在这种情况下使用其他类型的空格(例如小空格),因此解决方案应该关心处理所有不同的空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多