熊猫删除部分字符串中的空格

时间:2019-05-09 22:01:14

标签: python regex pandas

我正在编写一个正则表达式代码,以删除熊猫数据框中字符串的财务值的空白。假设一个名为df的熊猫数据帧,而在数据帧df中有一列“详细信息”。

例如,该列包含类似以下的字符串:

“底特律方面,每所房屋最多$ 1 000000”

“由于地震,每座被毁房屋的最低保额为300万美元”

我尝试在熊猫中使用str.replace方法,并应用了正则表达式。但是,

df['detail'].str.replace(r"(USD)\s*(\d+\s*)+(\d+)", r"USD\s\d+\d+", regex=True)

df['detail'].str.replace(r"(\$)\s*(\d+\s*)+(\d+)", r"\$\s\d+\d+", regex=True)

将返回

“根据底特律,每所房屋的最高USD \ s \ d + \ d +”

“由于地震而被毁房屋的最低价格为\ $ \ s \ d + \ d + 而不是用正确的格式替换数字。

预期结果是删除财务价值空白并返回:

“根据底特律,每所房屋最多1000000美元”

“由于地震造成的每所房屋损毁的最低保额为$ 3000000”

我应该尝试使用哪些代码删除财务价值内的空白?实际数据非常庞大,因此手工工作将非常繁琐。

已解决:

感谢您的回答,我使用了以下代码,并且效果很好。在大数据中,USD / $可能在财务编号之前有多个空格(或者可以为0),因此\ s +或\ s *提供了解决此问题的安全方法。

df['detail'] = df['detail'].apply(lambda x: re.sub(r'\s+(\d{3})', r'\1', x))

3 个答案:

答案 0 :(得分:2)

这似乎适合您的情况:

>>> import re
>>> phrases = ["minimum $ 3 000 000 per destroyed house due to Earthquake",
"maximum USD 1 000 000 per house as respects Detroit",
"You own me $ 1 000 000 000 dollars" ]
>>> for phrase in phrases:
...     re.sub(r'\s(\d{3})', r'\1', phrase)
... 
'minimum $ 3000000 per destroyed house due to Earthquake'
'maximum USD 1000000 per house as respects Detroit'
'You own me $ 1000000000 dollars'
>>> 

也对此进行了测试:

>>> re.sub(r'\s(\d{3})', r'\1', 'This is a really big number 3 000 434 132 131 111 333 right?')
'This is a really big number 3000434132131111333 right?'
>>> 

答案 1 :(得分:2)

您的问题的单行答案将是在熊猫中使用Apply功能。

export class PlansService {
  private plansData:any = {};

  constructor(private httpCallService: HttpCallService, private http: HttpClient) { 

    this.plansData = this.httpCallService.getHttpResponse("GET_PLANS");

  }
  getPlans(): Observable<any>{
    return this.plansData;
   }

}

答案 2 :(得分:0)

好吧,我认为最简单的方法是将“ 0”替换为0,因为您永远不会拥有以0开头的值。 任何类型的数字x 000,x000,x00 000都在0之前具有不必要的空间。

因此

df['detail'] = df['detail'].str.replace(" 0", "0")