KeyError, хотя он существует - PullRequest
0 голосов
/ 29 января 2019

Учитывая данные

rows = [
    {'x': 1, 'y': 2, 'z': 3},
    {'x': 2, 'y': 2, 'z': 3},
]

, если я попытаюсь построить такой фрейм данных, как этот

frame = pd.DataFrame.from_records(rows, index='x')

, он работает нормально.Однако этот

frame = pd.DataFrame.from_records(rows, index='x', columns=['y', 'z'])

(который я ожидал бы эквивалентным) завершается ошибкой со странной ошибкой: KeyError: 'x'.Что не так?

Ответы [ 4 ]

0 голосов
/ 29 января 2019

columns применяется как фильтр до обработки вашего index аргумента.Следовательно, вы видите KeyError, так как Панды не могут найти x после фильтрации по ['y', 'z'].Одним из решений является reindex после считывания данных в фрейм данных:

frame = pd.DataFrame.from_records(rows, index='x').reindex(columns=['y', 'z'])

В качестве альтернативы, вы можете указать все поля, включая ваш индекс:

frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])

Это дает преимущество нечтение в ненужных полях и фильтрация как последующий шаг.

0 голосов
/ 29 января 2019

Добавьте x к вашему columns:

df = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
0 голосов
/ 29 января 2019

Использование:

import pandas as pd

rows = [
    {'x': 1, 'y': 2, 'z': 3},
    {'x': 2, 'y': 2, 'z': 3},
]

frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
print(frame)

Выход:

   y  z
x      
1  2  3
2  2  3
0 голосов
/ 29 января 2019

Вам необходимо включить x в свои столбцы.Например:

rows = [{'x': 1, 'y': 2, 'z': 3}, {'x': 2, 'y': 2, 'z': 3}]
frame = pd.DataFrame.from_records(rows, index='x')
display(frame)
    y   z
x       
1   2   3
2   2   3
frame = pd.DataFrame.from_records(rows, index='x', columns=['x', 'y', 'z'])
display(frame)
    y   z
x       
1   2   3
2   2   3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...