2017-11-10 30 views
2

を比較するので、特定の列を選択したい大規模なCSVファイルがあります。そこから日付を読み取り、今日比較します。私はPandasのドキュメントを読んでいて、カラムをdatetimeフォーマットに変換するのに使用しましたが、ランタイムエラー 'AttributeError:' Series 'オブジェクトに' days '属性がありません。 to_datetime。これは、これまでの私のコードです:pythonの日の金額とCSVファイルの

`df = pd.read_csv('roadData.csv',delimiter = ';',encoding = "latin1",error_bad_lines=False) 
thisDate = datetime.date.today() 
correctCars.dateRegistered = correctCars.dateRegistered.apply(str) 
paivat = pd.to_datetime(correctCars.dateRegistered, errors='coerce') 
fiveYears = paivat[(paivat.days - thisDate.days >= 0) & (paivat.days - thisDate.days <= 1825)] 
print(fiveYears.count()) 
` 
+1

また、あなたはdatetime型に変換することができます。 'read_csv'を呼び出すときは' parse_dates = 'ensirekisterointipvm''を使います。 –

+1

注: 'days'の使用は、timedeltaオブジェクトには適切であり、datetimeオブジェクトには適切ではありません。 –

答えて

4

大規模なデータをフィルタリングのための可能な利用パラメータusecolsのみいくつかの列(複数可)とフィルタリングbetweenのためである場合:

paivat = pd.read_csv('roadData.csv', 
        sep = ';', 
        encoding = "latin1", 
        error_bad_lines=False, 
        usecols=['dateRegistered'], 
        parse_dates=['dateRegistered']) 

#if parse_dates doesnt return datetimes 
#paivat = pd.to_datetime(paivat.dateRegistered, errors='coerce') 

#for compare need datetime 
thisDate = datetime.datetime.now() 

#get days 
d = (paivat.dateRegistered - thisDate).dt.days 
#filtering 
fiveYears = paivat[d.between(0, 1825)] 

または:

fiveYears = paivat[(d >= 0) & (d <= 1825)] 

必要な場合:

print (d.between(0, 1825).sum()) 

または:

print (((d >= 0) & (d <= 1825)).sum()) 

サンプル:あなたのCSVを読み込むとき

import pandas as pd 
import numpy as np 
from pandas.compat import StringIO 
import datetime 

temp=u"""dateRegistered;col 
2017-11-25;0 
2017-12-26;1 
2017-12-27;2 
2017-11-28;3 
2017-11-29;4 
2017-11-30;5 
2017-11-01;7 
2017-11-02;8 
2017-11-03;9""" 
#after testing replace 'StringIO(temp)' to 'roadData.csv' 
paivat = pd.read_csv(StringIO(temp), 
        sep = ';', 
        encoding = "latin1", 
        error_bad_lines=False, 
        usecols=['dateRegistered'], 
        parse_dates=['dateRegistered']) 

thisDate = datetime.datetime.now() 

d = (paivat.dateRegistered - thisDate).dt.days 
print (d) 
0 14 
1 45 
2 46 
3 17 
4 18 
5 19 
6 -10 
7 -9 
8 -8 
Name: dateRegistered, dtype: int64 

print (d.between(0, 15).sum()) 
1 
関連する問題