Пустой список, в результате чего pd.DataFrame() не возвращает строк

#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 строк, а не одной строки.