如何保留DataFrame中存在含冒号(:)行的列?
保留DataFrame中至少含一行冒号(:)的列
问题
有一个包含约50列的DataFrame,需要仅保留其中至少有一行数据包含冒号(:)的列。示例数据及期望输出如下:
示例数据
DATE CALL_ID TALK_TIME SPEED_OF_ANSWER CONSULT_TIME 0 2023-11-21 29933702 NaN NaN NaN 1 2023-11-21 29933703 00:04:16 00:00:01.373 NaN 2 2023-11-21 29933703 NaN NaN 00:14:10 3 2023-11-21 29933704 00:24:30 00:00:01.391 NaN 4 2023-11-21 29933705 00:04:08 00:00:34.360 NaN
期望输出
TALK_TIME SPEED_OF_ANSWER CONSULT_TIME 0 NaN NaN NaN 1 00:04:16 00:00:01.373 NaN 2 NaN NaN 00:14:10 3 00:24:30 00:00:01.391 NaN 4 00:04:08 00:00:34.360 NaN
解决方案
使用Pandas的apply结合字符串检查筛选目标列:
import pandas as pd import numpy as np # 构造示例DataFrame(实际使用时替换为你的数据) data = { 'DATE': ['2023-11-21', '2023-11-21', '2023-11-21', '2023-11-21', '2023-11-21'], 'CALL_ID': [29933702, 29933703, 29933703, 29933704, 29933705], 'TALK_TIME': [np.nan, '00:04:16', np.nan, '00:24:30', '00:04:08'], 'SPEED_OF_ANSWER': [np.nan, '00:00:01.373', np.nan, '00:00:01.391', '00:00:34.360'], 'CONSULT_TIME': [np.nan, np.nan, '00:14:10', np.nan, np.nan] } df = pd.DataFrame(data) # 筛选列:保留至少有一行包含冒号的列 filtered_df = df.loc[:, df.apply(lambda col: col.astype(str).str.contains(':').any())] print(filtered_df)
代码说明
col.astype(str):将列内所有元素转为字符串,处理NaN(转为'NaN',不含冒号)str.contains(':'):检查每个元素是否包含冒号,返回布尔值Series.any():判断该列是否存在至少一个符合条件的元素(即至少一个True)df.loc[:, ...]:通过布尔索引筛选出目标列
内容的提问来源于stack exchange,提问作者Bama
相关产品推荐
相关产品推荐

