【问题标题】:Python: Pandas: making a dictionary from dataframePython:熊猫:从数据框制作字典
【发布时间】:2017-01-13 00:26:41
【问题描述】:

我正在尝试将数据框转换为字典:

xtest_cat = xtest_cat.T.to_dict().values()

但它会发出警告:

警告:DataFrame 列不是唯一的,python 会省略某些列

我检查了数据框(xtest_cat)的列名:

len(list(xtest_cat.columns.values)) 
len(set(list(xtest_cat.columns.values)))

它们都是独一无二的。 谁能帮我吗 ?

【问题讨论】:

  • 您调用了转置,所以您的索引是唯一的吗? xtest_cat.T 返回转置,使索引成为列
  • @EdChum。是的,我还通过以下方式进行了检查:print len(xtrain_test.ix[:,0]) print len(list(xtrain_test.ix[:,0])) print len(set(list(xtrain_test.ix[:,0])))
  • 您需要通过print (xtest_cat.index.is_unique)检查索引的唯一性
  • @jezrael 我通过以下print len(xtrain_test.ix[:,0]) print len(list(xtrain_test.ix[:,0])) print len(set(list(xtrain_test.ix[:,0]))) 进行了检查。是一样的吗?
  • 不是,因为它测试第一列,而不是索引。

标签: python pandas dictionary dataframe multiple-columns


【解决方案1】:

您可以使用reset_index 创建unique 索引:

xtest_cat = pd.DataFrame({'A':[1,2,3],
                          'B':[4,5,6],
                          'C':[7,8,9]})

xtest_cat.index = [0,1,1]
print (xtest_cat)
   A  B  C
0  1  4  7
1  2  5  8
1  3  6  9

print (xtest_cat.index.is_unique)
False

xtest_cat.reset_index(drop=True, inplace=True)
print (xtest_cat)
   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

xtest_cat = xtest_cat.T.to_dict().values()
print (xtest_cat)
dict_values([{'B': 4, 'C': 7, 'A': 1}, {'B': 5, 'C': 8, 'A': 2}, {'B': 6, 'C': 9, 'A': 3}])

也可以省略T,添加参数orient='index'

xtest_cat = xtest_cat.to_dict(orient='index').values()
print (xtest_cat)
dict_values([{'B': 4, 'C': 7, 'A': 1}, {'B': 5, 'C': 8, 'A': 2}, {'B': 6, 'C': 9, 'A': 3}])

orient='record' 更好:

xtest_cat = xtest_cat.to_dict(orient='records')
print (xtest_cat)
[{'B': 4, 'C': 7, 'A': 1}, {'B': 5, 'C': 8, 'A': 2}, {'B': 6, 'C': 9, 'A': 3}]

【讨论】:

  • xtest_cat = xtest_cat.to_dict('records') 怎么样?
  • 是的,这样更好。
  • 如果我的回答有帮助,别忘了accept。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2018-08-01
  • 2019-03-31
  • 2016-01-14
  • 2019-01-03
  • 2014-11-22
相关资源
最近更新 更多