Добавление столбца в pandas DataFrame из распакованного сжатого списка - PullRequest
0 голосов
/ 04 апреля 2020

Мне нужно прочитать список HTML файлов в pandas Фреймы данных.

  1. Каждый файл HTML имеет несколько фреймов данных (я использовал pd.concat для их объединения).
  2. Имена файлов HTML содержат строку, которую я хотел бы добавить в виде столбца.
# Read all files into a list
files = glob.glob('monthly_*.html')

# Zip the dfs with the desired string segment
zipped_dfs = [zip(pd.concat(pd.read_html(file)), file.split('_')[1]) for file in files]

У меня проблемы с распаковкой сжатого списка (df, product ).

dfs = []

# Loop through the list of zips, 
for _zip in zipped_dfs:

    # Unpack the zip
    for _df, product in _zip:

        # Adding the product string as a new column
        _df['Product'] = product
        dfs.append(_df)

Однако я получаю сообщение об ошибке 'str' object does not support item assignment

Может кто-нибудь объяснить, как лучше добавить новый столбец?

1 Ответ

1 голос
/ 04 апреля 2020

Вы должны удалить строку zip из списка. Если вам нужен кортеж объединенных фреймов данных и имя продукта, вы должны написать:

zipped_dfs = [(pd.concat(pd.read_html(file)), file.split('_')[1]) 
              for file in files]

Однако промежуточный этап создания списка кортежей не требуется. Весь подход может быть упрощен следующим образом:

dfs = []
for file in glob.glob('monthly_*.html'):
    # NOTE: your code seemingly keeps .html in the product name
    # so I modified the split operation
    df = pd.concat(pd.read_html(file))
    df['Product'] = file.split('.html')[0].split('_')[1]     
    dfs.append(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...