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

时间:2014-12-02 03:14:36

标签: python for-loop pandas

我有一个数据框(df),想要打印数据框中每列的唯一值。

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

column_list = df.columns.values.tolist()
for column_name in column_list:
    print(df."[column_name]".unique()

更新

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

column_list = sorted_data.columns.values.tolist()
for column_name in column_list:
      print(sorted_data[column_name].unique()

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

for column_name in sorted_data:
      print(column_name)
      s = sorted_data[column_name].unique()
      for i in s:
        print(str(i))

9 个答案:

答案 0 :(得分:28)

可以这样写得更简洁:

for col in df:
    print df[col].unique()

通常,您可以使用[]运算符(例如df['col'])或indexing通过attribute访问DataFrame列(例如df.col )。

属性访问使得代码在事先知道目标列名称时更简洁,但有几个注意事项 - 例如,当列名称不是有效的Python标识符时,它不起作用(例如{{1} }),或与内置DataFrame属性冲突(例如df.123)。另一方面,df.index表示法应始终有效。

答案 1 :(得分:3)

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

print(df.apply(lambda col: col.unique()))

答案 2 :(得分:2)

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

df_dict = dict(zip([i for i in df.columns] , [pd.DataFrame(df[i].unique(), columns=[i]) for i in df.columns]))

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

df_dict[column name]

答案 3 :(得分:1)

只需这样做:

for i in df.columns:
    print(df[i].unique())

答案 4 :(得分:0)

cu = []
i = []
for cn in card.columns[:7]:
    cu.append(card[cn].unique())
    i.append(cn)

pd.DataFrame( cu, index=i).T

答案 5 :(得分:0)

我们可以使其更加简洁:

df.describe(include='all').loc['unique', :]

Pandas describe提供了有关每列的一些关键统计信息,但是我们只需获取“独特”统计信息,然后保留该统计信息即可。

请注意,这将为数字列提供唯一的NaN计数-如果您还希望包括这些列,则可以执行以下操作:

df.astype('object').describe(include='all').loc['unique', :]

答案 6 :(得分:0)

或者简而言之可以写为:

for val in df['column_name'].unique():
    print(val)

答案 7 :(得分:0)

下面的代码可以为您提供每个字段的唯一值列表,当您想深入了解数据框时,我发现它非常有用:

&x

如果希望对唯一值进行排序,也可以对其进行排序:

for col in list(df):
    print(col)
    print(df[col].unique())

答案 8 :(得分:-2)

做到这一点的最佳方法:

Series.unique()

例如 students.age.unique(),输出将是在学生数据框的“年龄”列中出现的不同值。

仅获取多少个不同值的数量:

Series.nunique()