我正在尝试过滤掉一些数据并且似乎遇到了一些错误。 在此声明下面是我拥有的以下代码的副本:
filtered = election_data[map(lambda x: (last_day - x).days <= 5, election_data["Start Date"]) ]
如您所见,last_day是列选举数据中的最大值 我想过滤掉其中数据之间的区别 max和x小于或等于5天 我尝试过使用for循环和列表理解的各种组合。
<map object at 0x10798a2b0>
这行通常可以正常工作,python3给出了以下错误:
{{1}}
答案 0 :(得分:0)
你的第一次尝试几乎是正确的。问题是
(last_day - election_date['Start Date']).days
应该是
(last_day - election_date['Start Date']).dt.days
Series
个对象没有days
属性,只有TimedeltaIndex
个对象。下面是一个完整的例子。
data = pd.read_csv(url, parse_dates=['Start Date', 'End Date', 'Entry Date/Time (ET)'])
data.loc[(data['Start Date'].max() - data['Start Date']).dt.days <= 5]
请注意,我使用的Series.max
效果比内置max
更高效。{1}}。此外,data.loc[mask]
略快于data[mask]
,因为它的重载较少(具有更专业的用例)。
答案 1 :(得分:-1)
如果我正确理解了您的问题,您只想过滤距离最后一天Start Date
天的任何<=5
值的数据。这听起来像是pandas索引可以使用.loc
轻松处理。
如果您想要一个带有过滤数据的全新DataFrame对象:
election_data # your frame
last_day = max(election_data["Start Date"])
date = # Your date within 5 days of the last day
new_df = election_data.loc[(last_day-election_data["Start Date"]<=date)]
或者,如果您只想要Start Date
列后过滤:
last_day = max(election_data["Start Date"])
date = # Your date within 5 days of the last day
filtered_dates = election_data.loc[(last_day-election_data["Start Date"]<=date), "Start Date"]
请注意,您的date
变量必须是Start Date
所需格式的日期(可能是YYYYmmdd格式?)。如果你不知道这个变量应该是什么,那么只需print(last_day)
然后计算5天。