在pandas数据帧的每一列中打印唯一值

yos*_*rry 17 python for-loop pandas

我有一个数据框(df),并希望打印数据框中每列的唯一值.

我需要将变量(i)[列名]替换为print语句

column_list = df.columns.values.tolist()
for column_name in column_list:
    print(df."[column_name]".unique()
Run Code Online (Sandbox Code Playgroud)

更新

当我使用它时:我得到了"意外的EOF解析"而没有额外的细节.

column_list = sorted_data.columns.values.tolist()
for column_name in column_list:
      print(sorted_data[column_name].unique()
Run Code Online (Sandbox Code Playgroud)

你的语法YS-L(上面)和下面有什么区别:

for column_name in sorted_data:
      print(column_name)
      s = sorted_data[column_name].unique()
      for i in s:
        print(str(i))
Run Code Online (Sandbox Code Playgroud)

YS-*_*S-L 33

它可以更简洁地写成这样:

for col in df:
    print df[col].unique()
Run Code Online (Sandbox Code Playgroud)

通常,您可以通过使用运算符(例如)或通过属性(例如)索引来访问DataFrame的列.[]df['col']df.col

当目标列名称事先已知时,属性访问使代码更简洁,但有几个警告 - 例如,当列名称不是有效的Python标识符(例如df.123)时,它不起作用,或者与构建的内容冲突时不起作用-in DataFrame属性(例如df.index).另一方面,[]符号应始终有效.


Rah*_*dre 12

最受好评的答案是循环解决方案,因此使用 pandas apply() 方法和 lambda 函数添​​加一行解决方案。

print(df.apply(lambda col: col.unique()))
Run Code Online (Sandbox Code Playgroud)

  • 当我这样做时,我收到错误消息“数组必须具有相同的长度”。所有列都有相同的数量或行,那么为什么我会收到该消息? (2认同)

小智 12

这将以正确的格式获得唯一值:

pd.Series({col:df[col].unique() for col in df})
Run Code Online (Sandbox Code Playgroud)


A.K*_*Kot 5

如果您尝试创建评论中提到的多个单独的数据帧,请创建数据帧字典:

df_dict = dict(zip([i for i in df.columns] , [pd.DataFrame(df[i].unique(), columns=[i]) for i in df.columns]))
Run Code Online (Sandbox Code Playgroud)

然后您可以使用列的名称轻松访问任何数据框:

df_dict[column name]
Run Code Online (Sandbox Code Playgroud)