Как изменить все столбцы в CSV-файл на стр? - PullRequest
1 голос
/ 20 сентября 2019

Я работаю над сценарием, который импортирует файл Excel, просматривает столбец с названием «Заголовок» и возвращает значение «Ложь», если в «Заголовке» присутствует определенное ключевое слово.Сценарий выполняется, пока я не доберусь до части, где я хочу экспортировать другой файл CSV, который дает мне отдельный столбец.Моя ошибка заключается в следующем: AttributeError: 'int' object has no attribute 'lower'

На основании этой ошибки я изменил df.Title на строку, используя df['Title'].astype(str), но я получаю ту же ошибку.

import pandas as pd

data = pd.read_excel(r'C:/Users/Downloads/61_MONDAY_PROCESS_9.16.19.xlsx')
df = pd.DataFrame(data, columns=['Date Added','Track Item', 'Retailer Item ID','UPC','Title','Manufacturer','Brand','Client Product 
Group','Category','Subcategory',
                           'Amazon Sub Category','Segment','Platform'])
df['Title'].astype(str)
df['Retailer Item ID'].astype(str)

excludes = ['chainsaw','pail','leaf blower','HYOUJIN','brush','dryer','genie','Genuine 
Joe','backpack','curling iron','dog','cat','wig','animal','dryer',':','tea', 'Adidas', 'Fila',
'Reebok','Puma','Nike','basket','extension','extensions','batteries','battery','[EXPLICIT]']

my_excludes = [set(x.lower().split()) for x in excludes]
match_titles = [e for e in df.Title.astype(str) if any(keywords.issubset(e.lower().split()) for 
keywords in my_excludes)]

def is_match(title, excludes = my_excludes):
    if any(keywords.issubset(title.lower().split()) for keywords in my_excludes):
        return True
    return False

Это та часть, которая возвращает ошибку:

df['match_titles'] = df['Title'].apply(is_match)
result = df[df['match_titles']]['Retailer Item ID']
print(df)
df.to_csv('Asin_List(9.18.19).csv',index=False)

Ответы [ 3 ]

2 голосов
/ 20 сентября 2019

Используйте следующий код для импорта файла:

data = pd.read_excel(r'C:/Users/Downloads/61_MONDAY_PROCESS_9.16.19.xlsx',
                      dtype='str')`
0 голосов
/ 20 сентября 2019

В строке, где вы написали

match_titles = [e for e in df.Title.astype(str) if any(keywords.issubset(e.lower().split()) for 
keywords in my_excludes)]

python возвращает в качестве переменной e целое число, а не строку, которая вам нравится. Это происходит потому, что когда вы пишете df.Title.astype(str), вы ищете индекс новой пандыфрейм данных, содержащий только заголовок столбца, а не содержимое столбца. Если вы хотите перебрать столбец, попробуйте

match_titles = [e for e in df.ix[:,5] if any(keywords.issubset(e.lower().split()) for keywords in my_excludes)

. df.ix [:, 5] возвращает пятый столбец фрейма данных df., который вам нужен. Если это не сработает, попробуйте использовать функцию iteritems().Основная идея заключается в том, что если вы непосредственно назначаете df [столбец] чему-то другому, вы назначаете его индекс, а не его содержимое.

0 голосов
/ 20 сентября 2019

Для pandas.read_excel вы можете передать необязательный параметр dtype.

Вы также можете использовать его для передачи нескольких типов данных для разных столбцов:

ex: dtype={'Retailer Item ID': int, 'Title': str})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...