2016-03-13 1056 views
2

我在目錄中有多個csv文件,並且我將循環到csv文件查找文件名列表並讀取每個文件名並將它們連接成單個文件數據幀。在一個單一的情況下,剛讀數據集中讀取多個csv文件,將它們的文件名列表連接成一個單獨的DataFrame

這裏舉例CSV文件,我有我的目錄:

  • 2013_nba.csv
  • 2014_nba.csv
  • 2015_nba.csv
  • 2013_basketball.csv
  • 2014_basketball.csv
  • 2015_soccer.csv

這是我到目前爲止。但是這基本上讀取所有csv文件並將它們連接成一個DF。我需要幫助一個如何循環通找到找到字符串列表(CSV)

path = 'C:\\Users\csvfiles\\' 
csvFiles = glob.glob(path + "/*.csv") 

list_ = [] 

for files in csvFiles: 
    df = pd.read_csv(files, index_col=None, header=0) 
    list_.append(df) 

frame = pd.concat(list_, ignore_index=True) 

我牛逼的蟒蛇,我嘗試做「爲‘NBA’在文件中」摳所有CSV文件名稱帶有「 nba「,然後製作一個DF,但沒有成功。

回答

4

UPDATE:

get_merged_csv()函數的比特改進版本可通過參數傳遞給pd.read_csv()

import os 
import glob 
import pandas as pd 

def get_merged_csv(flist, **kwargs): 
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], ignore_index=True) 

path = 'C:/Users/csvfiles' 
fmask = os.path.join(path, '*nba*.csv') 

df = get_merged_csv(glob.glob(fmask), index_col=None, usecols=['rank', 'name']) 

print(df.head()) 

OLD版本

import os 
import glob 
import pandas as pd 

path = 'C:/Users/csvfiles' 
#fmask = '*.csv' 

def get_merged_csv(path, fmask): 
    return pd.concat([pd.read_csv(f, index_col=None, header=0) 
         for f in glob.glob(os.path.join(path, fmask))] 
      ) 

df_list = [get_merged_csv(path, fmask) 
      for fmask in ['*nba.csv', '*basketball.csv', '*soccer.csv']] 

df_list將有三個DFs:df_list[0] - NBA,df_list[1] - 籃球,df_list[1] - 足球

或者你可以把它們放入一個字典:

df_dict = {} 
df_dict['nba'] = get_merged_csv(path, '*nba.csv') 
df_dict['basketball'] = get_merged_csv(path, '*basketball.csv') 
df_dict['soccer'] = get_merged_csv(path, '*soccer.csv') 

幾點說明:

get_merged_csv(path, fmask)功能讀取list comprehension循環CSV文件,這個名單的DF將傳遞到pd.concat()函數,該函數將返回單個級聯的DF

+0

我正在尋找3個不同的df,一個用於所有文件cont ains「nba」,另一個是「籃球」,最後一個是「足球」。你做的只是'nba'csv文件 – mtkilic

+0

@MahmutKilic,請檢查我的更新回答 – MaxU

+0

這項工作完美謝謝你。你介意解釋這是如何工作的嗎?我也意識到閱讀csv文件以「* nba.csv」或「* basketball.csv」結尾只是爲了將來如果我有文件名「2014_nba_usa.csv」和「2014_basket_usa.csv」,我該如何做類似這是因爲這兩個文件都以「usa.csv」結尾。最好的辦法是做「* nba_usa.csv」,或者有辦法從文件名中間拿「nba」 – mtkilic

相關問題