Python Pandas使用findall()筛选月度数据时仅返回单列如何解决?
解决方案
你当前单独提取date列执行匹配逻辑,所以返回结果仅包含单列数据。要保留全列数据,需要基于匹配结果生成布尔索引,对完整DataFrame做切片过滤即可,以下是几种实现方案:
方案1:兼容原有逻辑调整
在你原有findall逻辑的基础上生成布尔掩码,再对全表做筛选:
search = '2021-07' # 生成布尔掩码:匹配到目标月份的行标记为True mask = all_dataframe["date"].str.findall(str(search)).str.len() > 0 month_dataframe = all_dataframe[mask]
方案2:更简洁的字符串匹配写法
用str.contains替代findall,代码更精简:
search = '2021-07' month_dataframe = all_dataframe[all_dataframe["date"].str.contains(search)]
方案3:日期类型最优实践
建议先将date列转换为pandas内置的日期类型,后续做日期类操作的效率和灵活性都更高:
import pandas as pd # 转换日期列格式 all_dataframe["date"] = pd.to_datetime(all_dataframe["date"]) # 按年月筛选 search = '2021-07' month_dataframe = all_dataframe[all_dataframe["date"].dt.to_period('M') == search]
内容的提问来源于stack exchange,提问作者Shivkumar Mallesappa
相关产品推荐
相关产品推荐

