打印大熊猫数据框中每列的唯一值

我有一个 dataframe (df) ,希望从 dataframe 中的每一列打印唯一的值。

我需要在 print 语句中替换变量(i)[ column name ]

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))
165076 次浏览

可以这样写:

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

通常,您可以使用 []操作符(例如 df['col'])通过 索引访问 DataFrame 的一列,或者通过 属性(例如 df.col)访问 DataFrame 的一列。

当预先知道目标列名时,属性访问使代码更简洁一些,但是有几个警告——例如,当列名不是一个有效的 Python 标识符(例如 df.123) ,或者与内置 DataFrame 属性(例如 df.index)冲突时,属性访问不起作用。另一方面,[]符号应该始终有效。

如果你正在尝试创建多个独立的数据框架,就像你的评论中提到的那样,创建一个数据框架字典:

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]
cu = []
i = []
for cn in card.columns[:7]:
cu.append(card[cn].unique())
i.append(cn)


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

我们可以更简洁地说:

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

熊猫描述给出了一些关于每个专栏的关键统计数据,但是我们可以只抓住“唯一”的统计数据,然后就此打住。

注意,这将为数字列提供一个唯一的 NaN计数——如果你也想包括这些列,你可以这样做:

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

简而言之,它可以这样写:

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

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

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

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

import numpy as np
for col in list(df):
print(col)
print(np.sort(df[col].unique()))

最好的办法是:

Series.unique()

例如,()的输出将是在学生数据框架的年龄列中出现的不同值。

若要仅获取不同值的数目:

Series.nunique()

最常见的答案是一个循环解决方案,因此添加了一个单行解决方案,该解决方案使用熊猫 application ()方法和 lambda 函数。

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

只要这样做:

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

这将得到适当格式的唯一值:

pd.Series({col:df[col].unique() for col in df})

下面的代码可以将所有唯一值作为数据框架的列进行转换:

columns=[*df.columns]
unique_values={}
for i in columns:
unique_values[i]=df[i].unique()
unique=pd.DataFrame(dict([ (k,pd.Series(v)) for k,v in unique_vals.items() ]))
unique.fillna('').T

我也在寻找这个问题的解决方案,下面的代码对我的情况更有帮助,

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

它给出的结果如下:

Fuel_Type
['Diesel' 'Petrol' 'CNG']




HP
[ 90 192  69 110  97  71 116  98  86  72 107  73]




Met_Color
[1 0]

这个解决方案使用一些统计信息构造一个具有唯一值的数据框架,并可以优雅地处理任何不可散列的列类型。

产生的数据框架列是: colunique_lendf_lenperc_uniqueunique_values

df_len = len(df)
unique_cols_list = []
for col in df:
try:
unique_values = df[col].unique()
unique_len = len(unique_values)
except TypeError:  # not all cols are hashable
unique_values = ""
unique_len = -1
perc_unique = unique_len*100/df_len
unique_cols_list.append((col, unique_len, df_len, perc_unique, unique_values))
df_unique_cols = pd.DataFrame(unique_cols_list, columns=["col", "unique_len", "df_len", "perc_unique", "unique_values"])
df_unique_cols = df_unique_cols[df_unique_cols["unique_len"] > 0].sort_values("unique_len", ascending=False)
print(df_unique_cols)