You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:16:34