Панды — добавление нового столбца строки приводит к NaN

#python #pandas

Вопрос:

У меня возникли некоторые проблемы с назначением нового столбца в фрейме данных Pandas — он работает, но я хочу понять, почему это происходит;

Когда я впервые попытался присвоить идентификатор строке, результатом было NaN..

 df = pandas.json_normalize(data) all_per = pandas.DataFrame() for person in peopleList:  all_per['id'] = person  all_per['name'] = df['results.(id:' person ').localizedFirstName']   ' '     df['results.(id:' person ').localizedLastName']  

Результаты:

 id name 0 NaN Adam Smith  

Однако, если я немного уменьшу назначение идентификатора, это сработает..

 df = pandas.json_normalize(data) all_per = pandas.DataFrame() for person in peopleList:  all_per['name'] = df['results.(id:' person ').localizedFirstName']   ' '     df['results.(id:' person ').localizedLastName']  all_per['id'] = person  

Результаты:

 name id 0 Adam Smith FQR4bL_80K  

Это отняло у меня много времени, и я понятия не имею, почему это произошло? Есть какие-нибудь идеи?

Ответ №1:

Вы не можете добавить скалярное значение. Вы должны включить person в список:

 df = pandas.json_normalize(data) all_per = pandas.DataFrame() for person in peopleList:  all_per['id'] = [person] # lt;- HERE  all_per['name'] = df['results.(id:' person ').localizedFirstName']   ' '     df['results.(id:' person ').localizedLastName']  

Выход:

 gt;gt;gt; all_per   id name 0 FQR4bL_80K Adam Smith  

Комментарии:

1. О, спасибо — верно, да, я добавляю скалярное значение, которое не имеет смысла, так как в списке может быть несколько человек.. Я воспользуюсь all_per.append . Очень признателен

2. Это не лучшая стратегия. Вы должны собрать свои данные в структуру данных python (список или дикт), а затем объединить их pd.concat в конце цикла.