使用plydata筛选仅数值列(排除布尔列)及跨数据框列筛选问题
在plydata中仅选择数值列(排除布尔列)
pandas的is_numeric会把布尔类型(bool)归为数值子类,所以直接用select_if('is_numeric')会把布尔列也包含进来。你可以通过直接判断数据类型来精确筛选:
import numpy as np from plydata import select_if titanic_data >> select_if(lambda x: np.issubdtype(x.dtype, np.number) and x.dtype != np.bool_)
或者用更简洁的写法,指定允许的数值类型:
titanic_data >> select_if(lambda x: x.dtype in (np.int64, np.float64))
你原来的代码里select_if('-is_bool')不生效,是因为plydata没有内置is_bool判断函数,直接通过dtype判断更可靠。
基于另一数据框取消选择列
可以先从目标数据框中提取要排除的列名列表,然后用select或drop操作移除这些列:
方法1:使用select排除列
# 从另一数据框other_df中获取要排除的列 cols_to_exclude = other_df.columns.tolist() titanic_data >> select(f"-{cols_to_exclude}")
方法2:使用drop函数更直观
from plydata import drop cols_to_exclude = other_df.columns.tolist() titanic_data >> drop(cols_to_exclude)
如果只需要排除另一数据框中的部分列,直接传入对应的列名列表即可,比如cols_to_exclude = ['age', 'fare']。
内容的提问来源于stack exchange,提问作者Ransingh Satyajit Ray
相关产品推荐
相关产品推荐

