因此,我的字典中的数据框存在问题-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'
有什么办法可以解决?
编辑: 这是我的数据框的第一部分:
0 1
0 VW 1383
1 AUDI 1053
2 VOLVO 789
3 BMW 749
4 OPEL 621
5 MERCEDES BENZ 593
...
第一行和第一列正是我要删除/重命名的
答案 0 :(得分:0)
通过对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
(其文档为here)以避免排序到列表,然后再转换回字典。
修改
关于列和索引的命名,如果看不到数据/所需结果,很难给出具体建议。上面的选项将消除错误,并允许您创建一个数据框,然后可以使用dataframe.columns = [list, of, column, headings]
重命名其列。对于索引,请查看pd.DataFrame.set_index(drop=True)
(docs)和pd.DataFrame.reset_index()
(docs)。
答案 1 :(得分:0)
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)