如何使用Pandas从CSV文件中提取符合指定日期范围的日期值及对应行的NAME字段
我来帮你修正这个问题——你之前的代码把日期从原数据里单独抽成列表,自然就丢失了和NAME的关联啦。咱们直接在DataFrame上操作,保留每一行的对应关系就能解决这个问题。
修改后的解决方案
下面是两种实现方式,你可以根据需求选择:
方式一:推荐使用(日期类型更健壮)
把日期列转换为datetime类型,避免字符串比较可能出现的格式问题,同时完整保留NAME和日期的对应关系:
import pandas as pd # 读取CSV文件 df = pd.read_csv("scratch_2.csv") # 将日期列转换为datetime类型,确保日期比较的准确性 df['D_INT_1'] = pd.to_datetime(df['D_INT_1']) df['D_INT_2'] = pd.to_datetime(df['D_INT_2']) # 定义目标日期范围 start_date = pd.to_datetime("2022-03-01") end_date = pd.to_datetime("2024-12-31") # 收集符合条件的结果 results = [] # 筛选D_INT_1在范围内的行,提取NAME和对应日期 filtered_int1 = df[(df['D_INT_1'] >= start_date) & (df['D_INT_1'] <= end_date)] for _, row in filtered_int1.iterrows(): results.append(f"{row['NAME']}, {row['D_INT_1'].strftime('%Y-%m-%d')}") # 筛选D_INT_2在范围内的行,提取NAME和对应日期 filtered_int2 = df[(df['D_INT_2'] >= start_date) & (df['D_INT_2'] <= end_date)] for _, row in filtered_int2.iterrows(): results.append(f"{row['NAME']}, {row['D_INT_2'].strftime('%Y-%m-%d')}") # 逐行输出结果 print('\n'.join(results))
方式二:直接用字符串比较(适合日期格式严格为YYYY-MM-DD的情况)
如果你的日期列已经是标准的YYYY-MM-DD字符串格式,也可以跳过类型转换,直接用字符串比较:
import pandas as pd df = pd.read_csv("scratch_2.csv") # 定义目标日期范围(字符串格式) start_date = "2022-03-01" end_date = "2024-12-31" results = [] # 处理D_INT_1列 filtered_int1 = df[(df['D_INT_1'] >= start_date) & (df['D_INT_1'] <= end_date)] for _, row in filtered_int1.iterrows(): results.append(f"{row['NAME']}, {row['D_INT_1']}") # 处理D_INT_2列 filtered_int2 = df[(df['D_INT_2'] >= start_date) & (df['D_INT_2'] <= end_date)] for _, row in filtered_int2.iterrows(): results.append(f"{row['NAME']}, {row['D_INT_2']}") print('\n'.join(results))
示例输出
针对你给出的示例DataFrame:
NAME, ADDRESS, D_INT_1, D_INT_2 Mark, H4N1V8, 2023-01-02, 2019-01-01
运行代码后会输出:
Mark, 2023-01-02
如果某一行的两个日期都符合条件,会输出两条对应记录(比如NAME为Alice,D_INT_1是2022-05-01,D_INT_2是2023-06-01,会输出Alice, 2022-05-01和Alice, 2023-06-01)。
内容的提问来源于stack exchange,提问作者Chadi N
相关产品推荐
相关产品推荐

