映射pandas Dataframe列中的值?

时间:2016-12-07 20:49:33

标签: python python-3.x pandas numpy dataframe

我正在尝试过滤掉一些数据并且似乎遇到了一些错误。 在此声明下面是我拥有的以下代码的副本:

 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}}

2 个答案:

答案 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天。