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

标签 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'} 并显示该特定列的所有可能值。键是列名。

最佳答案

我认为@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 添加新键更快>.

关于通过迭代创建字典的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56874048/

相关文章:

python - PyMongo——游标迭代

python - virtualenv 下的 Django runserver 使用错误版本

python - Pandas Dataframe 浮点精度

python - 在 Python 中使用 pd.read_csv() 仅访问一次带标题的 csv 文件

python - 在 sqlalchemy select 对象中测试 where 子句

python - 将数据粘贴到 Pandas 数据框中

python - 交互式 Plotly Int slider

python - 彩色 Pandas 时间序列按列绘制

python - 为什么 Pandas 串联 (pandas.concat) 的内存效率如此之低?

python - 使用 DataFrame.plot 在堆积条形图中显示总计和百分比