2016-12-07 17 views
-1

いくつかのデータを除外しようとしていて、いくつかのエラーが発生しているようです。あなたはLAST_DAYは私が 間の違いの最大データをフィルタリングしたい列election_data 内で最大で見ることができるようにpandasデータフレーム列の値のマッピング?

url = "http://elections.huffingtonpost.com/pollster/2012-general-election-romney-vs-obama.csv" 
source = requests.get(url).text 
s = StringIO(source) 
election_data = pd.DataFrame.from_csv(s, index_col=None).convert_objects(
     convert_dates="coerce", convert_numeric=True) 
election_data.head(n=3) 
last_day = max(election_data["Start Date"]) 
filtered = election_data[((last_day-election_data['Start Date']).days <= 5)] 

:この文の下に は、私が持っている次のコードのレプリカですxは5日以下です 私はfor - ループやリストの理解のさまざまな組み合わせを使用しようとしました。

filtered = election_data[map(lambda x: (last_day - x).days <= 5, election_data["Start Date"]) ] 

この行は、正常に動作しますが、のpython3は私に次のエラーを与える:

<map object at 0x10798a2b0> 
+0

for python 3 'を追加する必要があります 'list' - ' filtered' - election_data [リスト(マップ(ラムダx:(最終日 - x).days <= 5、election_data ["開始日"]))] ' – jezrael

+0

[ここ](http://stackoverflow.com/q/1303347/2901002) – jezrael

+0

これは誤りではありません。 –

答えて

-1

私が正しくあなたの質問を理解していれば、あなただけのどこ<=5日である任意のStart Date値のデータをフィルタリングします最後の日から離れている。これは、.locを使用して、パンダのインデックス作成が容易に処理できるように思えます。

あなたはフィルタリングされたデータと完全に新しいデータフレームオブジェクトたい場合:

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日後にカウントされます。

+0

'last_day-election_data [" Start Date "] <= 5'は有効な比較ではありません。左側は整数と比較できない 'timedelta64 [ns]'の 'Series'です。 –

+0

Go note @IgorRaush。日付の書式設定を完全に忘れてしまった。答えを更新しました。 – ralston

0

あなたの最初の試みはほぼ正しいです。問題ではなく

(last_day - election_date['Start Date']).dt.days 

Seriesオブジェクトがdays属性を持っていないする必要があります

(last_day - election_date['Start Date']).days 

で、唯一TimedeltaIndexオブジェクトが行います。完全に動作する例を以下に示します。私はビルトインmaxよりもパフォーマンスでSeries.maxを使用しました

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] 

注意。また、data.loc[mask]は、あまりオーバーロードされない(より特殊化されたユースケースを持つ)ため、data[mask]よりやや高速です。

関連する問題