Столбец со списком строк в python
У меня есть pandas dataframe, как показано ниже:
categories review_count
0 [Burgers, Fast Food, Restaurants] 137
1 [Steakhouses, Restaurants] 176
2 [Food, Coffee & Tea, American (New), Restaurants] 390
... .... ...
... .... ...
... .... ...
Из этого dataFrame я хотел бы извлечь только те строки, в которых список в столбце "категории" этой строки содержит категорию "Рестораны". Я до сих пор пробовал: df[[df.categories.isin('Restaurants'),review_count]]
,
поскольку у меня также есть другие столбцы в dataFrame, я указал эти два столбца, которые я хочу извлечь. Но я получаю сообщение об ошибке:
TypeError: unhashable type: 'list'
Я не очень понимаю, что означает эта ошибка, поскольку я очень новичок в pandas. Пожалуйста, дайте мне знать, как я могу достичь своей цели извлечения только тех строк из dataFrame, где столбец "категории" для этой строки имеет строку "Рестораны" как часть категории_list.
Любая помощь будет высоко оценена.
Спасибо заранее!
Ответы
Ответ 1
Я думаю, вам, возможно, придется использовать функцию lambda
для этого, так как вы можете проверить, является ли значение в вашем столбце isin
некоторой последовательностью, но pandas
, похоже, не предоставляет функцию для проверки того, последовательность в вашем столбце содержит некоторое значение:
import pandas as pd
categories = [['fast_food', 'restaurant'], ['coffee', 'cafe'], ['burger', 'restaurant']]
counts = [137, 176, 390]
df = pd.DataFrame({'categories': categories, 'review_count': counts})
# Show which rows contain 'restaurant'
df.categories.map(lambda x: 'restaurant' in x)
# Subset the dataframe using this:
df[df.categories.map(lambda x: 'restaurant' in x)]
Вывод:
Out[11]:
categories review_count
0 [fast_food, restaurant] 137
2 [burger, restaurant] 390
Ответ 2
Хорошо, поэтому я уже давно пытаюсь найти ответ на этот вопрос, но придумал пустой (без написания небольшой рекурсивной программы для расширения списка), и я думаю, что, поскольку сначала румяна в любом случае, то, что вы пытаетесь сделать, на самом деле не так эффективно (комментарий Jimmy C о том, что списки, являющиеся изменяемыми, находятся здесь), и это не так, как вы делали это чаще всего в Pandas.
Лучше и (я думаю) быстрее будет хранить ваш вложенный список в виде значений столбцов, чтобы у вас было:
df
review_count Burgers Fast Food Restaurants Steakhouses Food CoffeeTea American (New)
0 137 True True True False False False False
1 176 False False True True False False False
2 390 False False True False True True True
Очевидно, это связано с написанием программы python, чтобы вытащить ваши категории из своих вложенных списков, а затем экспортировать их в DataFrame, но это однократное попадание (для существующих данных) может оказаться полезным для того, что вы получаете при использовании pandas для анализа результирующего фрейма.
В разделе Wes вы можете найти Python для анализа данных под названием "Computing Indicator/Dummy Variables" (примерно около 330), который был бы хорошим ресурсом для такого рода операций.
Извините, это на самом деле не отвечает на ваш вопрос, и я, конечно, не знаю, насколько это возможно, но в остальном вы можете попробовать решение rtrwalker, которое выглядит довольно хорошо, но это ветка развития, просто FYI.
Ответ 3
Я думаю, что в pandas0.12 вы можете делать такие вещи, как:
df.query('"Restaurants" in categories')
docs на pandas.DataFrame.query