我有一个数据框 (df),其列 df[‘description] 包含一串文本,如下所示:
Compu serve Industries Inc. 584-965-7524 2568 3/8/2018 100,685,865.78
ABC_Computer Services Inc. 631-692-2571 3384 2/1/2019 5,625.25
ABCD & EFGH Industries, Inc. 718-995-1040 9759 5/25/2019 1,963.52
ABC Industries, Inc. 631-582-2640 7816 11/16/2000 1,695.66
ABC Corporation 800-242-6229 5584 2/27/2018 30,562.54
每行不同字段之间的空格数各不相同。我想要完成的是将每个字段提取到其自己的单独列中。例如,我已经提取了“电话”、“ID”、“日期”和“金额”字段。我不知道如何对供应商名称执行相同的操作。
df['Phone']=df['combined_data'].str.extract('(\d{3}[-\.\s]\d{3}[-\.\s]\d{4})')
df['ID']=df['combined_data'].str.extract('(\d{4})')
df['Date']=df['combined_data'].str.extract('(\d{1,2}\/\d{1,2}\/\d{4})')
df['Amount']=df['combined_data'].str.extract('(\$?(?:\d+,)*\d+\.\d+)')
非常感谢您对此的任何帮助。谢谢!
最佳答案
您可以使用
pat = r'^(.*?)\s+(\d{3}[-.\s]\d{3}[-.\s]\d{4})\s+(\d{4})\s+(\d{1,2}/\d{1,2}/\d{4})\s+(\d[\d,.]*)'
df[['VendorName','Phone','ID','Date','Amount']] = df['Description'].str.extract(pat)
请参阅regex demo .
详细信息
^
- 字符串开头(.*?)
- 供应商名称组:任意 0 个以上字符,尽可能少\s+
- 1 个以上空格(\d{3}[-.\s]\d{3}[-.\s]\d{4})
- 电话号码组:\s+
- 1 个以上空格(\d{4})
- ID 组:四位数字\s+
- 1 个以上空格(\d{1,2}/\d{1,2}/\d{4})
- 日期组:4 位数字,1+\s+
- 1 个以上空格(\d[\d,.]*)
- 金额组:一个数字,然后 0+ 个点、逗号或数字。
关于python - 将供应商名称提取到数据框中的单独列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56009271/