使用Python datascience库筛选2017年日期条目问题咨询
筛选datascience Table中2017年的条目
我来帮你搞定这个筛选问题!你遇到的布尔判断只作用于最后一个输入的问题,大概率是用了Python原生的and/or来做数组级别的逻辑判断——这在datascience库的Table操作里是行不通的,因为这些运算符只针对单个布尔值,而非整个列的数组。下面给你两种靠谱的解决方案:
方法1:直接通过日期范围筛选(推荐)
如果你的Date列是标准的日期字符串(比如YYYY-MM-DD格式),可以直接用datascience库的are.between方法来指定2017年的起止日期,一步到位:
from datascience import Table, are # 假设你的数据已经加载到table变量中 table = Table.read_table("your_data_file.csv") # 筛选2017年1月1日到12月31日的所有条目 filtered_2017 = table.where("Date", are.between("2017-01-01", "2017-12-31"))
方法2:提取年份列后筛选
如果你的日期格式比较特殊,或者后续还需要用到年份做其他操作,可以先给Table新增一个Year列,再筛选年份等于2017的行:
from datascience import Table, are table = Table.read_table("your_data_file.csv") # 定义一个提取年份的函数 def get_year(date_str): # 假设日期是YYYY-MM-DD格式,拆分后取第一个元素转成整数 return int(date_str.split("-")[0]) # 新增Year列 table_with_year = table.with_column("Year", table.apply(get_year, "Date")) # 筛选2017年的条目 filtered_2017 = table_with_year.where("Year", are.equal_to(2017))
为什么你之前的布尔判断失效了?
如果之前你尝试了类似下面的写法:
# 错误示例!不能用and做数组布尔判断 filtered = table.where((table.column("Date") >= "2017-01-01") and (table.column("Date") <= "2017-12-31"))
Python的and运算符会把整个布尔数组当成一个整体判断,最终只会返回数组最后一个元素的布尔值,导致筛选结果完全不符合预期。正确的数组级逻辑判断应该用&(且)或者|(或),并且要给每个条件加括号:
# 正确的数组布尔判断写法 filtered = table.where((table.column("Date") >= "2017-01-01") & (table.column("Date") <= "2017-12-31"))
不过还是推荐用are.between,代码更简洁易读~
内容的提问来源于stack exchange,提问作者WastedPotential
相关产品推荐
相关产品推荐

