我正在尝试创建一个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 = []
这里的产品,颜色,大小都是列名,而dict键应该像color_list等一样命名。 最终我需要访问每个键:字典中的value_list。 预期产出:
KEY VALUE
color_list : ["red","blue","black"]
size_list: ["9","XL","32","10 inches"]
答案 0 :(得分:2)
这样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转换为dict,并在映射DataFrame的列时创建新的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']}
答案 1 :(得分:1)
我正在尝试创建一个key:value对字典,其中key是数据框的列名,value将是一个包含该列中所有唯一值的列表。
您可以使用简单的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]}
答案 2 :(得分:0)
如果我正确理解您的问题,您可能需要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}
答案 3 :(得分:0)
在这里我是如何做到的,让我知道它是否有帮助
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