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
所有df
到list
,然后使用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)
您未使用的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)
在这种情况下,没有理由保留'final_df'的第一个实例。它只是最终被取代。 – languitar
@languitar,忘记删除它,谢谢:) –
看起来像括号是错在你的列表理解。 – languitar
@languitar - 谢谢,纠正。 – jezrael