#python #pandas
Вопрос:
import pandas as pd pd.DataFrame({'genre': 'Pop', 'country': 'CA', 'artist_name': 'Olivia Rodrigo', 'title_name': 'good 4 u', 'release_date': '2021-05-13', 'core_genre': 'Pop', 'metrics': [], 'week_id': 202101, 'top_isrc': 'USUG12101245'})
возвращает имена столбцов, но в противном случае пустой фрейм данных, и это происходит из-за пустого списка для metrics:
. Это проблема. Было бы лучше, если бы это вернуло 1-строчный фрейм данных с пустым списком в metrics
столбце.
Вот пример данных без пропущенных метрик:
{'genre': 'Pop', 'country': 'CA', 'artist_name': 'Olivia Rodrigo', 'title_name': 'drivers license', 'release_date': '2021-01-07', 'core_genre': 'Pop', 'metrics': [{'name': 'Song w/SES On-Demand', 'value': [{'name': 'tp', 'value': 1}, {'name': 'lp', 'value': 0}, {'name': 'ytd', 'value': 1}, {'name': 'atd', 'value': 1}]}, {'name': 'Song w/SES On-Demand Audio', 'value': [{'name': 'tp', 'value': 0}, {'name': 'lp', 'value': 0}, {'name': 'ytd', 'value': 0}, {'name': 'atd', 'value': 0}]}, {'name': 'Streaming On-Demand Total', 'value': [{'name': 'tp', 'value': 414}, {'name': 'lp', 'value': 0}, {'name': 'ytd', 'value': 414}, {'name': 'atd', 'value': 414}]}, {'name': 'Streaming On-Demand Audio', 'value': [{'name': 'tp', 'value': 69}, {'name': 'lp', 'value': 0}, {'name': 'ytd', 'value': 69}, {'name': 'atd', 'value': 69}]}], 'week_id': 202101, 'top_isrc': 'USUG12004749'}
и с этим довольно хорошо справляется pd.DataFrame()
, создавая строку для каждого из 4 вложенных параметров в списке metrics
. Я предполагаю, что по той же причине pd.DataFrame() возвращает 4 строки в этом втором примере (4 дикта в списке), pd.DataFrame() возвращает 0 строк в приведенном выше примере (0 диктов в списке). Однако потерянная строка данных является проблемой. Как мы можем справиться с этим?
Ответ №1:
Пустой список может быть получен путем передачи списка пустого списка:
df = pd.DataFrame({'genre': 'Pop', 'country': 'CA', 'artist_name': 'Olivia Rodrigo', 'title_name': 'good 4 u', 'release_date': '2021-05-13', 'core_genre': 'Pop', 'metrics': [[]], 'week_id': 202101, 'top_isrc': 'USUG12101245'})
Дает
genre country artist_name title_name release_date core_genre metrics week_id top_isrc 0 Pop CA Olivia Rodrigo good 4 u 2021-05-13 Pop [] 202101 USUG12101245
Или вы тоже можете сделать это списком пустого диктанта [{}]
.
Комментарий:
Интересно, что простое указание одного списка возвращает пустую строку, но я полагаю, что с точки зрения панды, может возникнуть проблема с различением вектора значений строк от значения одной строки, которое является вектором, и поведение по умолчанию заключается в том, чтобы, по-видимому, выбросить всю строку? Интересный.
Комментарии:
1. имеет смысл. Я думаю, что наш желаемый результат на самом деле-пустой словарь, хотя я предполагаю, что мы можем заменить пустой список пустым диктом, чтобы получить те же результаты
2. Да, правильно — смотрите мой отредактированный комментарий 🙂
3. Да, это очень интересно. Также интересно, что подход по умолчанию, если в списке есть 2-3 варианта, заключается в создании 2-3 строк, а не одной строки.