从“熊猫数据框”列中提取产品

时间:2020-09-25 01:30:06

标签: python pandas text extract

我正在尝试仅从名称列中提取产品 下面。我正在努力寻找适合的正则表达式模式,甚至可能是命名实体识别,但是这是全部上限,我认为复杂的nlp解决方案不适合这样做。 如果有某种正则表达式模式可以提取日期和城市之间的所有内容,这就是我的目标。理想输出示例如下:

# example of our dataframe
data = {'Names':['02/25 APPLE AIR PODS LOS ANGELES  CA', 
             '01/31 AMAZON PRIME VIDEO MIAMI FL', 
             '05/14 SAMSUNG TV NASHVILLE TN']} 

# Convert Dictionary to Dataframe  
df = pd.DataFrame(data) 

df output expected
names:
APPLE AIR PODS
AMAZON PRIME VIDEO
SAMSUNG TV

1 个答案:

答案 0 :(得分:1)

以下内容删除了城市的日期,州和一个单词。

l=data['Names']
l=[i.replace('  ', ' ') for i in l] #there are some double spaces
m=[' '.join(i.split(' ')[1:-2]) for i in l]
print(m)

输出:

['APPLE AIR PODS LOS', 'AMAZON PRIME VIDEO', 'SAMSUNG TV']

如果要使用数据框格式:

df=pd.DataFrame({'Names':m})
print(df)

                Names
0  APPLE AIR PODS LOS
1  AMAZON PRIME VIDEO
2          SAMSUNG TV

当城市名称包含2个单词时,结果的最后一个单词将是某个城市的第一个单词,必须将其删除。我们必须有一个清单来检查它。例如,如果您的城市是cities=['SAN FRANSISCO', 'LOS ANGELES', 'NEW YORK', 'NASHVILLE', 'MIAMI'],则可以使用首字母为2个字长的城市创建一个新列表,然后进行比较,如下所示:

two_words=[i for i in cities if len(i.split(' '))>1]
first_of_two_words=[i.split(' ')[0] for i in two_words]

#result将是 最后,您可以检查m列表中的最后一个单词,并删除是否在first_of_two_words中:

for i in range(len(m)):
    if i.split(' ')[-1] in first_of_two_words:
        m=[' '.join(i.split(' ')[-1]) for i in m]

最终密码:

l=data['Names']
cities=['SAN FRANSISCO', 'LOS ANGELES', 'NEW YORK', 'NASHVILLE', 'MIAMI']
two_words=[i for i in cities if len(i.split(' '))>1]
first_of_two_words=[i.split(' ')[0] for i in two_words]
l=[i.replace('  ', ' ') for i in l] #there are some double spaces
m=[' '.join(i.split(' ')[1:-2]) for i in l]
for i in range(len(m)):
    if m[i].split(' ')[-1] in first_of_two_words:
        m[i]=' '.join(m[i].split(' ')[:-1])
df=pd.DataFrame({'Names':m})
print(df)

输出:

                Names
0      APPLE AIR PODS
1  AMAZON PRIME VIDEO
2          SAMSUNG TV