【问题标题】:Is there any way to remove column and rows numbers from DataFrame.from_dict?有没有办法从 DataFrame.from_dict 中删除列号和行号?
【发布时间】:2019-06-01 13:40:03
【问题描述】:

所以,我的字典中的数据框有问题 - 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
...

第一行和第一列正是我需要删除/重命名的内容

【问题讨论】:

  • 能否提供 df 样本?这将有助于复制问题
  • 好的,刚刚添加

标签: python python-3.x pandas dataframe series


【解决方案1】:

indexcolumns 是数据框的属性

只要len(df.index) > 0len(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)

【讨论】:

    【解决方案2】:

    通过对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)。

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      相关资源
      最近更新 更多