【问题标题】:Replacing commas with periods in text for decimal numbers (python)?用十进制数的文本中的句点替换逗号(python)?
【发布时间】:2021-11-03 17:56:54
【问题描述】:
  1. 我有一个数据集,它的字段包含文本信息(有单词和数字数据)。正如您在屏幕截图中看到的那样,有十进制数字。它们用逗号分隔,我需要确保它们之间有句点。

我之前尝试过编写一个正则表达式,但它会将文本中的所有逗号替换为句点。

Data_preprocessing['tweet_without_stopwords'] = Data_preprocessing['tweet_without_stopwords'].apply(lambda x: re.sub(",",'.', str(x)))

如何编写正则表达式,使其仅适用于数字的十进制表示法?也就是说,我想要在表单的文本中表达:number,number 在文本中是这样的number.number

  1. 示例破坏了数据
Data_preprocessing['tweet_without_stopwords'] = Data_preprocessing['tweet_without_stopwords'].apply(lambda x: re.sub("(\d*)\.(\d*)","\1,\2", str(x)))

方块出现了:D

3.

Data_preprocessing['tweet_without_stopwords'] = Data_preprocessing['tweet_without_stopwords'].apply(lambda x: re.sub("(\d+)\,(\d+)","\1.\2", str(x)))

结果再次

【问题讨论】:

  • 类似(\d*)\.(\d*)\1,\2?
  • 是的,但我认为恰恰相反——从“,”改为“。”
  • @kostya ivanov 你想从例如去吗? 128,01128.01 还是相反?

标签: python python-re


【解决方案1】:

您需要的正则表达式是"(\d+),(\d+)""\1.\2"。分解:

(\d+)       at least one digit (group 1)
,           a literal ,
(\d+)       at least one digit (group 2)

替换

\1         group 1
.          a period
\2         group 2

应用于您的代码,相关部分将是

lambda x: re.sub(r"(\d+),(\d+)",r"\1.\2", str(x))

Here's a testbed that verifies this regex is correct

【讨论】:

  • 我被冻结了,你可以用代码写这个,拜托
  • 完成。不会写出你的长数组名称(太懒了),但这应该足以让你继续前进。
  • 这打破了数据)在问题中添加了一张图片
  • 在我看来,它也能捕捉到裸露的时期。某处至少有一个“*”需要是“+”。
  • 我认为字符串需要以“r”为前缀:re.sub(r"(\d+),(\d+)", r"\1.\2", str(x))
猜你喜欢
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多