我正在编写一个正则表达式代码,以删除熊猫数据框中字符串的财务值的空白。假设一个名为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))
答案 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")