2017-07-26 1 views
0

私は過去14日間(毎朝午前)から特定の名前のすべてのcsvファイルを読み込むスクリプトを作成する必要がありますが、小さな立方体(ジュピター・ノートブックの中に)、その印は何もない。python pandasで過去14日間のcsvファイルを読み込んで連結します

def get_local_file(pdate, hour, path='/data/'): 
     """Get date+hour processing file from local drive 

     :param pdate: str Processing date 
     :param hour: str Processing hour 
     :param path: str Path to file location 
     :return: Pandas DF Retrieved DataFrame 
     """ 

     sdate = pdate + '-' + str(hour) 
     for p_file in os.listdir(path): 
      if fnmatch.fnmatch(p_file, 'ABC_*'+sdate+'*.csv'): 
       return path+p_file 

def get_files(pdate, path='/data/'): 
    hours = [time(i).strftime('%H') for i in range(24)] 
    fileList=[] 
    for hour in hours: 
     fileList.append(get_local_file(pdate, hour)) 
    return fileList 

end_datetime = datetime.combine(date.today(), time(0, 0, 0)) 
proc_datetime = end_datetime - timedelta(days=14) 
while proc_datetime <= end_datetime: 
    proc_datetime += timedelta(days=1) 
    a = get_files(str(proc_datetime.date()).replace('-', '_')) 
    frame = pd.DataFrame() 
    list_ = [] 
    for file_ in a: 
     if file_ != None: 
      df = pd.read_csv(file_,index_col=None, header=0, delimiter=';') 
      list_.append(df) 
      frame = pd.concat(list_) 

whileループからコードを作成することは可能ですが、それははるかに簡単ですが、やり方はわかりません。

+0

dfとフレームを直接連結しない理由:frame = pd.concat(df) – 2Obe

+0

@ 2Obeこのエラーを返す:最初の引数はpandasオブジェクトのiterableでなければならず、 "DataFrame"タイプのオブジェクトを渡した – jovicbg

+0

Soファイル名に日付も含まれていますか?または最後に修正された時間に基づいて選択されるべきかどうかを決定します。 –

答えて

1

あなたはこのようにそれを行うことができます.csvたくさんのファイルから単一のデータフレームを作成する場合:

  • が読み込ま一人一人のために、ファイルをループ
  • ループの前に空のリストを初期化しますデータフレームやリスト
  • に追加した日付やファイル名のあなたの取扱いがCORである場合、私はチェックしていなかったループ

後に単一のデータフレームの中にリストを連結RECTが、ここでは連結部分に関して、あなたのコードに関連する変更をしている:( - )、その中に文字

end_datetime = datetime.combine(date.today(), time(0, 0, 0)) 
proc_datetime = end_datetime - timedelta(days=14) 
list_ = [] 
while proc_datetime <= end_datetime: 
    proc_datetime += timedelta(days=1) 
    a = get_files(str(proc_datetime.date()).replace('-', '_')) 
    for file_ in a: 
     if file_ != None: 
      df = pd.read_csv(file_, index_col=None, header=0, delimiter=';') 
      list_.append(df) 
frame = pd.concat(list_) 
+0

それだけです。ループリストの前に空リストを置く必要がありますありがとうございました。 – jovicbg

1
import pandas 
import glob 
csvFiles = glob.glob(path + "/data/*.csv") 
list_ = [] 
for file in csvFiles: 
    if ((datetime.combine(date.today(), time(0, 0, 0)) - datetime(*map(int, file.split("-")[1].split("_")))).days < 14) 
     df = pandas.read_csv(file, index_col=None, header=0, delimiter=';') 
     list_.append(df_f) 
frame = pandas.concat(list_, ignore_index=True) 
frame.to_csv("Appended File.csv") 

ファイルパスを仮定しても、ハイフンを持ってdoesnot。

関連する問題