在Pandas中有条件地迭代列

1 投票
1 回答
1166 浏览
提问于 2025-05-10 15:39

我有一个Pandas的数据表,我想要统计每一列中不同值的数量,不过有些列我想排除在外。

我通常是这样选择某一列中的不同值,但我不太确定该怎么循环处理这些列:

pd.unique(df.column_name.ravel())

我脑海中想到的方式是这样的,但显然这不太对。

col_names = list(df.columns.values)
dont_include = ['foo', 'bar']
cols_to_include = [x for x in col_names if x not in dont_include]
for i in cols_to_include:
 col_unique_count = len(pd.unique(df.i.ravel())

有什么好的解决办法吗?

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

3

代码可以简化成这样:

cols_to_include = df.columns[~df.columns.str.contains('foo')]
for col in cols_to_include:
  col_unique_count = df[col].nunique()

你可以使用 nunique 来获取某个系列中独特值的数量。

或者:

cols_to_include = df.columns[~df.columns.str.contains('foo')]
df[cols_to_include].apply(pd.Series.nunique)

这里的 apply 会对每一列调用 nunique

编辑

使用 isin 来测试某个值是否在集合中,并用 ~ 来反转布尔值的结果:

In [47]:
df = pd.DataFrame(columns = ['foo','baz','bar','pie'])
df

Out[47]:
Empty DataFrame
Columns: [foo, baz, bar, pie]
Index: []

In [48]:
dont_include = ['foo', 'bar']
cols = df.columns[~df.columns.isin(dont_include)]
cols

Out[48]:
Index(['baz', 'pie'], dtype='object')

然后你可以像之前一样使用我的代码来遍历你数据框的子选择。

撰写回答