2016-04-09 18 views
0

Zaman çizelgeleri verilerini yalnızca iki tarih arasındaysa .csv'ye aktarmanın bir yolu var mı?Zamanlama verilerini bir .csv dosyasından iki tarih arasındaki bir veri çerçevesine içe aktarma

Aşağıdaki kod, bir dizi .csv dosyasındaki tüm verileri alabilir, ancak yalnızca iki tarih arasında içe aktarılabilir mi?

def getTimeseriesData(DataPath, startDate, endDate): 
    colNames = ['date'] 

    path = DataPath 
    filePath = path, "*.csv" 
    allfiles = glob.glob(os.path.join(path, "*.csv")) 
    for fname in allfiles: 
     name = os.path.splitext(fname)[0] 
     name = os.path.split(name)[1] 

     colNames.append(name) 
    print(colNames) 

    dataframes = [pd.read_csv(fname, header=None) for fname in allfiles] 


    reduce(partial(pd.merge, on=0, how='outer'), dataframes) 

    timeseriesData = reduce(partial(pd.merge, on=0, how='outer'), dataframes) 

    timeseriesData.columns=colNames 

    return timeseriesData 

    print(type(timeseriesData)) 

cevap

0
import glob 

def getTimeseriesData(data_path, start_date, end_date): 
    dfs = [] 
    for f_name in glob.glob(os.path.join(data_path, "*.csv")): 
     df = pd.read_csv(f_name, header=None) 
     # Date filter (assumes filter column is named 'date'). 
     dfs.append(df.loc[(df['date'] >= start_date) & (df['date'] <= end_date), :]) 
    dfs = pd.concat(dfs) 
    return dfs 
0

Sana genel bir cevap verecekti.

Her şeyden önce, tarihler tarihsaat biçiminde tutulmalıdır. Eğer 'Gün.Ay.Yıl' veya 'gün-ay-yıl' gibi formatında Excel'den içe, ben bir datetime

Pandalar datetime için tarihleri ​​dönüştürmek için bir işlevi pandas.to_datetime sahiptir

def to_date(date, split_sign): 
    date = date.split(split_sign) 
    day = date[0].replace(split_sign, ' ') 
    month = date[1].replace(split_sign, ' ') 
    if len(date[2].replace(split_sign, ' ')) < 4: 
     year = '20' + date[2].replace(split_sign, ' ') 
    else: 
     year = date[2].replace(split_sign, ' ') 
    date = str(day + month + year) 
    return datetime.datetime.strptime(date, '%d%m%Y').date() 
dönmek için böyle işlevini kullanırsınız ama benim için her zaman işe yaramıyor.

Ve tarih gibi eklenebilir gibi ardından finction [gün, ay, yıl]

def filter_df(df, date_from, date_to): 
    date1 = datetime.datetime(date_from[2], date_from[1], date_from[0]) 
    date2 = datetime.datetime(date_to[2], date_to[1], date_to[0]) 
    return df[(df['date']>=date1) & (df['date']<=date2)] 
İlgili konular