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

使用dt.to_period('M')转月份后无法筛选pandas DataFrame行如何解决

问题原因及解决方法

核心原因说明

  1. 你构造DataFrame时传入的txn_date是字符串格式,未转换为pandas的datetime类型,直接使用.dt访问器本身就会报错,无法生成正确的txn_month字段。就算你实际环境中做过初步的日期转换,也存在转换不规范、后续比较类型不匹配的问题。
  2. dt.to_period('M')返回的是pandas的Period类型,部分版本下直接和字符串'2021-05'比较会出现匹配失败的情况。
  3. 额外注意:你构造DataFrame时用了集合{}存储列值,集合是无序且不支持重复值的结构,会导致行数据顺序错乱、数据丢失,需要改用列表[]存储列值。

完整可运行的解决代码

import pandas as pd

# 第一步:正确构造DataFrame,用列表存储列值
df = pd.DataFrame({
    "txn_id": ['A','B','C'],
    "txn_date": ['2019-04-01','2020-06-01','2021-05-01']
})

# 第二步:必须先把txn_date转为datetime类型,这是所有日期操作的前提
df['txn_date'] = pd.to_datetime(df['txn_date'])

# 第三步:筛选2021-05的行,两种任选其一即可
# 方案1:转成字符串后比较,兼容性最高
df['txn_month'] = df['txn_date'].dt.strftime('%Y-%m')
result = df[df['txn_month'] == '2021-05']

# 方案2:用Period类型比较,显式转成Period对象避免类型不匹配
# df['txn_month'] = df['txn_date'].dt.to_period('M')
# result = df[df['txn_month'] == pd.Period('2021-05', freq='M')]

print(result)

内容的提问来源于stack exchange,提问作者Cathie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:06:07