通过迭代创建字典的Pythonic方法

时间:2019-07-03 15:58:58

标签: python pandas

我正在尝试写一些回答“每列中可能有什么值?”的

我创建了一个名为all_col_vals的字典,并从1迭代到数据框具有的许多列。但是,当在网上阅读有关此内容的信息时,有人说这看起来与Java太像了,更多的pythonic方式是使用zip。我在这里看不到如何使用zip。

all_col_vals = {}
for index in range(RCSRdf.shape[1]):
    all_col_vals[RCSRdf.iloc[:,index].name] = set(RCSRdf.iloc[:,index])

输出看起来像'CFN Network': {nan, 'N521', 'N536', 'N401', 'N612', 'N204'}, 'Exam': {'EXRC', 'MXRN', 'HXRT', 'MXRC'},并显示该特定列的所有可能值。关键是列名。

1 个答案:

答案 0 :(得分:9)

我认为@piRSquared的评论是最好的选择,因此我将窃取它作为答案并添加一些解释。

答案

假设您没有重复的列,请使用以下内容:

{k : {*df[k]} for k in df}

说明

k代表df中的列名。您不必使用.columns属性来访问它们,因为pandas.DataFrame的工作原理类似于python dict

df[k]代表系列k

{*df[k]}解压缩该系列中的值并将它们放入一个集合({})中,该集合仅根据定义保留不同的元素(see definition of a set)。

最后,使用列表推导创建dict比定义空dict并通过for-loop向其添加新键要快。