如何从Pandas DataFrame中排除闭店日期行并解决isin报错?
解决方法:排除DataFrame中属于闭店日期的行
嘿,这个错误的原因很明确——你不小心把整个Series包装进了列表里传给isin(),而Series是可变对象,没办法被哈希,所以触发了TypeError。咱们来修正这个问题:
方法1:直接传入闭店日期的Series
isin()函数本身就支持接收pandas Series作为参数,所以你只需要去掉外面的方括号就行:
df = df.loc[~df['Day'].isin(closeddays['Closed'])]
方法2:转换为列表后传入
如果你更习惯用列表操作,也可以把闭店日期的Series转成普通列表,这样更直观,也能彻底避免哈希问题:
# 先提取闭店日期为列表 closed_dates = closeddays['Closed'].tolist() # 筛选非闭店日期的行 df = df.loc[~df['Day'].isin(closed_dates)]
为什么原来的代码会报错?
你写的[closeddays['Closed']]是把整个Series放到了一个列表里,变成了一个包含单个Series元素的列表。isin()会尝试检查df['Day']中的每个日期是否存在于这个列表中,但Series是可变的(你可以随时修改它的值),而哈希操作要求对象是不可变的,所以就抛出了那个错误。
另外要确认一下:你的Day列和Closed列都是pd.to_datetime处理后的datetime64类型,这样日期匹配才不会有问题——看起来你已经做到这一点了,所以上面的代码应该能直接生效。
内容的提问来源于stack exchange,提问作者PV8
相关产品推荐
相关产品推荐

