python - 将供应商名称提取到数据框中的单独列中

标签 python regex pandas

我有一个数据框 (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/

相关文章:

r - R 中的 grepl 查找与任何字符串列表的匹配项

python - 如何在 python pandas 中标记循环数的值

python - 如何将一系列元组转换为 Pandas 数据框?

python - 为什么字符串对象被缓存在python中

javascript - 使用 Flask 在 HTML 上实时更新动态变量

python - 从字符串中间提取文本

java - 用于删除价格输入的美元符号和尾随零的正则表达式

python - 检查另一个中存在哪些行的 pandas

python - Tensorflow:在不转换为 float32 的情况下最小化 int64 数据的 L2 损失,因为转换会产生 "no gradients"错误

python - 为什么对实例方法的引用存储在每个实例对象中而不是类对象中?