#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
в конце цикла.