遍历日期列表创建专属Pandas DataFrame遇无输出问题求助
问题排查与解决
你的代码没有输出的核心问题出在判断条件if item in df:上——当你用item in df时,Pandas会检查这个item是不是DataFrame的列名(也就是source、time、date这三个),而不是检查date列里是否包含这个日期值。所以所有日期都不满足这个条件,循环里的筛选和打印代码根本没执行。
修正方案
你需要把判断逻辑改成检查日期是否存在于df['date']列的取值中,这里提供两种简单的实现方式:
方式1:修正判断条件
直接把if item in df:替换成if item in df['date'].values:,这样就能正确判断日期是否在DataFrame的date列里了。修正后的完整代码:
import pandas as pd unique_dates=['12/12/2017','12/13/2017','12/14/2017'] data=[['a','8:00','12/12/2017'],['b','9:00','12/13/2017'],['c','8:30','12/12/2017'], ['b','8:05','12/14/2017'],['a','8:10','12/13/2017'],['a','8:15','12/12/2017']] headers=['source','time','date'] df=pd.DataFrame(data,columns=headers) for item in unique_dates: # 修正:检查日期是否在date列的取值集合中 if item in df['date'].values: new_df=df[df['date']==item] print(f"--- 日期 {item} 的筛选结果 ---") print(new_df) print("\n")
方式2:省略判断(更简洁)
如果你的unique_dates里的日期都确保在df中存在,或者即使不存在也想输出空DataFrame,完全可以去掉判断步骤,直接筛选:
import pandas as pd unique_dates=['12/12/2017','12/13/2017','12/14/2017'] data=[['a','8:00','12/12/2017'],['b','9:00','12/13/2017'],['c','8:30','12/12/2017'], ['b','8:05','12/14/2017'],['a','8:10','12/13/2017'],['a','8:15','12/12/2017']] headers=['source','time','date'] df=pd.DataFrame(data,columns=headers) for item in unique_dates: new_df=df[df['date']==item] print(f"--- 日期 {item} 的筛选结果 ---") print(new_df) print("\n")
预期输出
运行修正后的代码,你会得到每个日期对应的筛选结果:
--- 日期 12/12/2017 的筛选结果 --- source time date 0 a 8:00 12/12/2017 2 c 8:30 12/12/2017 5 a 8:15 12/12/2017 --- 日期 12/13/2017 的筛选结果 --- source time date 1 b 9:00 12/13/2017 4 a 8:10 12/13/2017 --- 日期 12/14/2017 的筛选结果 --- source time date 3 b 8:05 12/14/2017
内容的提问来源于stack exchange,提问作者wanderweeer
相关产品推荐
相关产品推荐

