如何创建键字典:column_name 和 value:来自数据框的 python 中的列中的唯一值

Posted

技术标签:

【中文标题】如何创建键字典:column_name 和 value:来自数据框的 python 中的列中的唯一值【英文标题】:How to create a dictionary of key : column_name and value : unique values in column in python from a dataframe 【发布时间】:2017-10-21 16:03:40 【问题描述】:

我正在尝试创建一个 key:value 对的字典,其中 key 是数据框的列名,而 value 将是一个包含该列中所有唯一值的列表。最终我希望能够过滤掉 key_value根据条件从字典中配对。到目前为止,这是我能够做到的:

for col in col_list[1:]:
    _list = []
    _list.append(footwear_data[col].unique())
    list_name = ''.join([str(col),'_list'])

product_list = ['shoe','footwear']
color_list = []
size_list = []

这里的 product,color,size 都是列名,dict 键应该相应地命名,如 color_list 等。 最终,我将需要访问字典中的每个 key:value_list。 预期输出:

KEY              VALUE
color_list :    ["red","blue","black"]
size_list:  ["9","XL","32","10 inches"]

有人可以帮我解决这个问题吗?附上数据的快照。

【问题讨论】:

你能添加你的数据框吗? 【参考方案1】:

DataFrame 像这样:

import pandas as pd
df = pd.DataFrame([["Women", "Slip on", 7, "Black", "Clarks"], ["Women", "Slip on", 8, "Brown", "Clarcks"], ["Women", "Slip on", 7, "Blue", "Clarks"]], columns= ["Category", "Sub Category", "Size", "Color", "Brand"])

print(df)

输出:

  Category Sub Category  Size  Color    Brand
0    Women      Slip on     7  Black   Clarks
1    Women      Slip on     8  Brown  Clarcks
2    Women      Slip on     7   Blue   Clarks

您可以在映射 DataFrame 的列时将 DataFrame 转换为 dict 并创建新的 dict,如下例所示:

new_dict = "color_list": list(df["Color"]), "size_list": list(df["Size"])
# OR:
#new_dict = "color_list": [k for k in df["Color"]], "size_list": [k for k in df["Size"]]

print(new_dict)

输出:

'color_list': ['Black', 'Brown', 'Blue'], 'size_list': [7, 8, 7]

为了有一个唯一的值,你可以像这个例子一样使用set

new_dict = "color_list": list(set(df["Color"])), "size_list": list(set(df["Size"]))
print(new_dict)

输出:

'color_list': ['Brown', 'Blue', 'Black'], 'size_list': [8, 7]

或者,就像@Ami Tavory 在他的回答中所说的那样,为了从您的 DataFrame 中获得完整的唯一键和值,您可以简单地这样做:

new_dict = k:list(df[k].unique()) for k in df.columns
print(new_dict)

输出:

'Brand': ['Clarks', 'Clarcks'],
 'Category': ['Women'],
 'Color': ['Black', 'Brown', 'Blue'],
 'Size': [7, 8],
 'Sub Category': ['Slip on']

【讨论】:

这适用于添加少量唯一性,例如:“color_list”:[k for k in dict(footwear_data)["Color"].unique()。非常感谢。 如果footwear 是您的DataFrame,您可以简单地使用footwear_data["Color"].unique() 看,我的新更新。我添加了许多方式来获得相同的输出。选择满足您需求的那一款。【参考方案2】:

我正在尝试创建一个键值对字典,其中键是数据框的列名,值是包含该列中所有唯一值的列表。

您可以为此使用简单的dictionary comprehension。

假设你开始

import pandas as pd

df = pd.DataFrame('a': [1, 2, 1], 'b': [1, 4, 5])

那么下面的推导就解决了:

>>> c: list(df[c].unique()) for c in df.columns
'a': [1, 2], 'b': [1, 4, 5]

【讨论】:

【参考方案3】:

如果我正确理解您的问题,您可能需要set 而不是列表。可能在这段代码中,您可能会添加set 以获取给定列表的唯一值。

for col in col_list[1:]:
    _list = []
    _list.append(footwear_data[col].unique())
    list_name = ''.join([str(col),'_list'])
    list_name = set(list_name)

使用示例

>>> a_list = [7, 8, 7, 9, 10, 9]
>>> set(a_list)
    8, 9, 10, 7

【讨论】:

【参考方案4】:

如果有帮助,请告诉我我是怎么做的

import pandas as pd

df = pd.read_csv("/path/to/csv/file")

colList = list(df)
dic = 
for x in colList:
    _list = []
    _list.append(list(set(list(df[x]))))
    list_name = ''.join([str(x), '_list'])
    dic[str(x)+"_list"] = _list


print dic

输出:

'Color_list': [['Blue', 'Orange', 'Black', 'Red']], 'Size_list': [['9', '8', '10 inches', 'XL', '7']], 'Brand_list': [['Clarks']], 'Sub_list': [['SO', 'FOR']], 'Category_list': [['M', 'W']]

MyCsv 文件

Category,Sub,Size,Color,Brand
W,SO,7,Blue,Clarks
W,SO,7,Blue,Clarks
W,SO,7,Black,Clarks
W,SO,8,Orange,Clarks
W,FOR,8,Red,Clarks
M,FOR,9,Black,Clarks
M,FOR,10 inches,Blue,Clarks
M,FOR,XL,Blue,Clarks

【讨论】:

以上是关于如何创建键字典:column_name 和 value:来自数据框的 python 中的列中的唯一值的主要内容,如果未能解决你的问题,请参考以下文章

20 字典的函数及其作用

基于python中嵌套字典中的键删除项目

根据python中嵌套字典中的键删除项目

如何动态创建字典和添加键值对?

Python字典包含了以下内置方法

python-字典操作