如何将包含指定DateTime值的DataFrame行追加到列表中
问题原因
你的代码判断逻辑存在错误:if '16.06.2019 15:00' in ID_df.StartDateTime.values是判断当前AudioMothID对应的所有数据中是否存在目标时间,只要存在,该ID下遍历到的每一行都会触发添加条件,因此会把该ID的所有行都追加到列表中,而非仅匹配时间的行。
解决方案
推荐优先使用Pandas原生的布尔索引实现,无需嵌套循环,执行效率更高:
import pandas as pd df = pd.read_csv('Layer1.csv') # 生成目标ID列表 AudioMothIDs = getID() AudioMothIDs.remove('NA') # 定义目标时间,若StartDateTime为datetime类型需同步转换格式 target_time = '16.06.2019 15:00' # 同时匹配ID范围和时间条件 filter_df = df[(df['AudioMothID'].isin(AudioMothIDs)) & (df['StartDateTime'] == target_time)] # 提取指定列转为嵌套列表 orig_list = filter_df[['AudioMothID', 'StartDateTime']].values.tolist() print(orig_list)
如果需要保留你原有的遍历写法,只需修改判断条件为校验当前行的时间值即可:
把原代码中if '16.06.2019 15:00' in ID_df.StartDateTime.values:替换为if rows['StartDateTime'] == '16.06.2019 15:00':
注意事项
如果你的StartDateTime列已经被解析为datetime格式而非字符串,需要把目标时间也转换为同格式的datetime对象再做匹配,示例:target_time = pd.to_datetime('16.06.2019 15:00', format='%d.%m.%Y %H:%M')
内容的提问来源于stack exchange,提问作者user16889406
相关产品推荐
相关产品推荐

