Python:熊猫数据框 - 数据覆盖而不是串联的

问题描述:

我想从几个.csv文件中提取数据并将它们组合成一个大的数据框在pandas中。为此,我创建了一个数据框,该数据框应填入传入数据dataframes。Python:熊猫数据框 - 数据覆盖而不是串联的

final_df = DataFrame(columns=['Column1','Column2','Column3']) 

for file in glob.glob("file.csv"): 
    name_csv = str(file) 
    logfile = pd.read_csv(name_csv, skip_blank_lines = False) 
    df = DataFrame(logFile, columns=['Column1','Column2','Column3'] 
    concat = pd.concat([final_df,df]) 

但是,通过循环的每次迭代,先前提取的数据都会被覆盖。我怎么解决这个问题?

您需要首先append所有dflist,然后使用concat

也有一些改进,read_csv - logfile已经是东风,更好的是使用参数names

dfs = [] 
for file in glob.glob("*.csv"): 
    logfile = pd.read_csv(str(file), 
          skip_blank_lines = False, 
          names = ['Column1','Column2','Column3']) 
    dfs.append(logfile) 

concat = pd.concat(dfs) 

或者使用list comprehension

dfs = [pd.read_csv(str(file), 
     skip_blank_lines = False, 
     names = ['Column1','Column2','Column3']) for file in glob.glob("*.csv")] 

concat = pd.concat(dfs) 
+0

看起来像括号是错在你的列表理解。 – languitar

+0

@languitar - 谢谢,纠正。 – jezrael

您未使用的pd.concat结果都没有。变量concat仅在每次迭代中丢弃,但它将是部分数据帧。

您应该创建DF的名单和Concat的这一切在最后:

concat_list = [] 
for file in glob.glob("file.csv"): 
    name_csv = str(file) 
    logfile = pd.read_csv(name_csv, skip_blank_lines = False) 
    df = DataFrame(logFile, columns=['Column1','Column2','Column3'] 
    concat_list.appned(df) 
final_df = pd.concat(concat_list) 
+0

在这种情况下,没有理由保留'final_df'的第一个实例。它只是最终被取代。 – languitar

+0

@languitar,忘记删除它,谢谢:) –