如何从Pandas DataFrame字符串列中移除日期/时间值并替换为空?
处理DataFrame中混入日期/时间类型的字符串列
情况1:仅混入datetime/date类型对象
如果你的列里只有字符串对象和datetime/date类型对象,直接通过类型判断替换最高效:
import pandas as pd import datetime # 假设目标列名为'target_col' df['target_col'] = df['target_col'].apply( lambda x: pd.NA if isinstance(x, (datetime.datetime, datetime.date)) else x )
用isinstance直接检查元素类型,匹配到日期/时间类型就替换为pd.NA(Pandas推荐的空值表示,适配字符串列)。
情况2:同时混入datetime对象和字符串格式的日期
如果列里还存在像"2023-10-01"这样的字符串格式日期,需要一并替换的话,可以结合日期解析来识别:
import pandas as pd import datetime # 标记能被解析为日期的行 can_parse_date = pd.to_datetime(df['target_col'], errors='coerce').notna() # 标记本身就是datetime/date类型的行 is_date_type = df['target_col'].apply(lambda x: isinstance(x, (datetime.datetime, datetime.date))) # 满足任一条件的行替换为空值 df.loc[can_parse_date | is_date_type, 'target_col'] = pd.NA
pd.to_datetime(..., errors='coerce')会把无法解析的内容转为NaT,notna()筛选出能解析为日期的字符串;再和类型判断的结果合并,批量替换目标行。
最优选择
- 若仅存在datetime/date类型混入,优先用情况1的方法,类型判断速度快,逻辑简单。
- 若包含字符串格式的日期,用情况2的方法覆盖所有场景。
内容的提问来源于stack exchange,提问作者Paulo Cortez
相关产品推荐
相关产品推荐

