Есть ли способ удалить номера столбцов и строк из DataFrame.from_dict? - PullRequest
0 голосов
/ 06 января 2019

Итак, у меня проблема с моим фреймом данных из словаря - Python фактически «называет» мои строки и столбцы числами. Вот мой код:

a = dict()
dfList = [x for x in df['Marka'].tolist() if str(x) != 'nan']
dfSet = set(dfList)
dfList123 = list(dfSet)
for i in range(len(dfList123)):
    number = dfList.count(dfList123[i])
    a[dfList123[i]]=number
sorted_by_value = sorted(a.items(), key=lambda kv: kv[1], reverse=True)
dataframe=pd.DataFrame.from_dict(sorted_by_value)
print(dataframe)

Я пытался переименовать столбцы следующим образом: dataframe=pd.DataFrame.from_dict(sorted_by_value, orient='index', columns=['A', 'B', 'C']), но выдает ошибку:

AttributeError: 'list' object has no attribute 'values'

Есть ли способ это исправить?

* * 1010 Edit: Вот первая часть моего фрейма данных:

                     0     1
0                   VW  1383
1                 AUDI  1053
2                VOLVO   789
3                  BMW   749
4                 OPEL   621
5        MERCEDES BENZ   593
...

1-е строки и столбцы - это именно то, что мне нужно удалить / переименовать

Ответы [ 2 ]

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

index и columns являются свойствами вашего фрейма данных

Пока len(df.index) > 0 и len(df.columns) > 0, т. Е. Ваш фрейм данных имеет ненулевые строки и ненулевые столбцы, вы не можете избавиться от меток из вашего pd.DataFrame объекта. Независимо от того, построен ли фрейм данных из словаря или иным образом, не имеет значения.

Что вы можете сделать - это удалить их из представления вашего фрейма данных с выводом в виде объекта Python str или файла CSV. Вот минимальный пример:

df = pd.DataFrame([[1, 2, 3], [4, 5, 6]])

print(df)
#    0  1  2
# 0  1  2  3
# 1  4  5  6

# output to string without index or headers
print(df.to_string(index=False, header=False))
# 1  2  3
# 4  5  6

# output to csv without index or headers
df.to_csv('file.csv', index=False, header=False)
0 голосов
/ 06 января 2019

Сортировав объект dict_items (a.items()), вы создали список. Вы можете проверить это с помощью type(sorted_by_value). Затем, когда вы пытаетесь использовать метод pd.DataFrame.from_dict(), он терпит неудачу, потому что он ожидает словарь, который имеет «значения», но вместо этого получает список.

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

dataframe=pd.DataFrame.from_dict(sorted_by_value)

с:

dataframe = pd.DataFrame(dict(sorted_by_value), index=[0]).

(Аргумент index=[0] требуется здесь, потому что pd.DataFrame ожидает, что словарь будет иметь форму {'key1': [list1, of, values], 'key2': [list2, of, values]}, но вместо этого sorted_by_value преобразуется в форму {'key1': value1, 'key2': value2}.)

Другой вариант - использовать pd.DataFrame(sorted_by_value) для создания кадра данных непосредственно из отсортированных элементов, хотя вам может потребоваться настроить sorted_by_value или результат, чтобы получить нужный формат данных.

В качестве альтернативы посмотрите на collections.OrderedDict (документация для которого здесь ), чтобы избежать сортировки по списку и последующего преобразования обратно в словарь.

Редактировать

Относительно именования столбцов и индекса, не видя данных / желаемого результата, сложно дать конкретный совет. Приведенные выше параметры позволят удалить ошибку и позволят вам создать информационный кадр, столбцы которого затем можно переименовать с помощью dataframe.columns = [list, of, column, headings]. Для индекса посмотрите pd.DataFrame.set_index(drop=True) ( документы ) и pd.DataFrame.reset_index() ( документы ).

...