У меня все еще есть проблема с моим кодом, я не уверен, что еще я мог сделать.Я хочу удалить все варианты из названий продуктов.некоторые из них удаляются, а некоторые нет.Примеры того, что не удаляется, это oz, ml, mg и много слов, которые находятся в файле csv new_words_filtered.Я не уверен, какие другие подходы я мог бы использовать для выполнения этой задачи, я думал о регулярном выражении, но я не знаю всех шаблонов названий продуктов, или, возможно, использую нечеткое соответствие, чтобы найти самую длинную подходящую строку.
Немного о данных, 15 000 + все они - названия продуктов, которые включают такие варианты, как цвет, размер, упаковка и т. Д. Они имеют разную длину, форматы, а некоторые имеют неправильное написание и интервалы.
Янадеясь, что кто-нибудь посмотрит на мой код и, возможно, покажет мне, что я делаю не так, или у вас есть другие способы решения этой проблемы.
`import pandas as pd
import time
#file_name= 'new_london.csv'
file_name= 'london.csv'
words_filtered = 'new_words_filtered.csv'
colors = 'more_colors.csv'
df = pd.read_csv(file_name, header=None,
names=range(150))
colors_df = pd.read_csv(colors)
words_filtered_df = pd.read_csv(words_filtered)
def filter_lists(x):
x = str(x).strip()
x = " ".join(x.split())
if x.endswith('/'):
x = x[:-1].strip()
if x.endswith('.'):
x = x[:-1].strip()
if x.endswith('/'):
x = x[:-1].strip()
x = x.strip()
if len(x) < 2:
return ''
return x.lower()
colors_df = colors_df.applymap(filter_lists)
colors_df.drop_duplicates(inplace=True)
colors_df.dropna(inplace=True)
colors= list(set([ str(i[0]) for i in
colors_df.values.tolist()]))
colors.append('vanilla')
words_filtered_df.dropna(axis=1, how='all', inplace=True)
words_filtered_df =
words_filtered_df.applymap(filter_lists)
words_filtered_df.drop_duplicates(inplace=True)
words_filtered = set([ str(i[0]) for i in
words_filtered_df.values.tolist()])
words_filtered.remove('')
words_filtered = list(words_filtered)
df.columns = df.iloc[0]
df = df.drop(df.index[[0]])
df.fillna('', inplace=True)
d = df['name']
def filter_data_new(x):
x = x.lower().strip()
x = " ".join(x.split())
x = x.strip()
if x.endswith('.'):
x = x[:-1]
x = x.strip()
if x.endswith('/'):
x = x[:-1]
x = x.strip()
if x.endswith('.'):
x = x[:-1]
x = x.strip()
for i in colors:
if x.endswith(i):
l = len(i)
x = x[:-l]
x = x.strip()
x = x.strip().split('-')
x = "-".join([i.strip() for i in x if len(i.strip())])
for i in words_filtered:
if x.endswith(i):
x = x.strip()
l = len(i)
x = x[:-l]
x = x.strip()
break
x = x.strip().split('-')
x = "-".join([i for i in x if len(i.strip())])
for i in words_filtered:
if x.endswith(i):
x = x.strip()
l = len(i)
x = x[:-l]
x = x.strip()
break
x = x.strip().split('-')
x = " -".join([i for i in x if len(i.strip())])
if x.endswith('oz') or x.endswith('ml') :
x = x[:-2]
x = x.strip().split()
x = " ".join(x[:-1])
if x.endswith('jar'):
x = x[:-3]
x = x.strip().split()
x = " ".join(x[:-1])
return x.strip()
y = d.map(filter_data_new)
df['name'] = y
df.to_csv('london_new'+str(time.time()).replace('.','_')+'.csv', index=False)