Не могу изменить имена столбцов в данных панд - PullRequest
1 голос
/ 13 марта 2019

У меня есть словарь Python, который выглядит следующим образом:

d = {'comp_1': {'property_4': 24, 'property_2': 45, 'property_3': 124, 'missing': 39, 'property_1': 16}, 
 'comp_2': {'property_4': 23, 'property_2': 49, 'property_3': 126, 'property_1': 16, 'missing': 38}, 
 'comp_3': {'property_4': 24, 'property_2': 43, 'property_1': 19, 'missing': 30, 'property_3': 116}}

Когда я загружаю его в файл данных panda и пытаюсь его распечатать, он выглядит следующим образом:

df = pd.DataFrame.from_dict(hits, orient='index')
print(df)

Вывод:

        missing  property_1  property_2  property_3  property_4
comp_1       39          16          45         124          24
comp_2       38          16          49         126          23
comp_3       30          19          43         116          24

Теперь я хочу переименовать столбцы, поэтому я пытаюсь:

df = pd.DataFrame.from_dict(hits, orient='index' columns=reversed(['Missing', 'P1', 'P2', 'P3', 'P4']))

, что приводит к пустому фрейму данных (что я предполагаю, потому что эти ключи не существуют в словаре?):

Empty DataFrame
Columns: []
Index: []

Если я попробую это вместо:

df = pd.DataFrame.from_dict(hits, orient='index')
columns = reversed(['Missing', 'P1', 'P2', 'P3', 'P4'])
df.columns=columns

столбцы переименовываются по порядку, не сохраняется, поэтому каждый раз, когда я запускаю код, число не соответствует столбцу,Например:

        P4  P3   P2  P1  Missing
comp_1  16  24  124  45       39
comp_2  16  23  126  49       38
comp_3  19  24  116  43       30

и:

        P4  P3  P2   P1  Missing
comp_1  24  16  39  124       45
comp_2  23  16  38  126       49
comp_3  24  19  30  116       43

Я предполагаю, что мне нужно каким-то образом предоставлять ключи из вложенного словаря при загрузке данных в фрейм данных, но я не уверен, каксделать это.Или это что-то еще, что мне нужно сделать?

Редактировать: Я также попытался переименовать столбцы со словарем следующим образом:

df.rename({'missing': 'Missing', 'property_1': 'P1', 'property_2': 'P2', 'property_3': 'P3',
           'property_4': 'P4'})

, но все еще старые имена отображаются

Ответы [ 2 ]

4 голосов
/ 13 марта 2019

К сожалению, параметр columns в to_dict указывает только те столбцы, которые вы хотите выбрать.Например,

pd.DataFrame.from_dict(hits, orient='index', columns=['property_4'])

        property_4
comp_1          24
comp_2          23
comp_3          24

только выбирает столбец «property_4», игнорируя все остальное.Конечно, это имеет смысл, поскольку словари по своей природе не имеют порядка.Единственный вариант - переименовать ключи или переименовать столбцы, используя DataFrame.rename().

cmap = {'property_1': 'P1', 'property_2': 'P2', 'property_3': 'P3', 
        'property_4': 'P4', 'missing': 'Missing'}
df = df.rename(columns=cmap)
df

        P4  P2   P3  Missing  P1
comp_1  24  45  124       39  16
comp_2  23  49  126       38  16
comp_3  24  43  116       30  19
0 голосов
/ 13 марта 2019

Вы можете указать, чтобы заменить столбцы и дать вам отображение 1: 1.Добавление флага на месте сделает это в существующем фрейме данных, опущение даст вам новый фрейм данных с новыми именами столбцов.

df.rename(columns = {
    'property_1': 'P1',
    'property_2': 'P2',
    'property_3': 'P3',
    'property_4': 'P4',
    'missing': 'Missing'
    }, inplace = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...