遍历多个CSV文件合并为DataFrame时for循环仅执行一次的问题
问题原因
你代码的核心问题是data_final = pd.DataFrame()初始化语句放在了for循环内部:
- 每次循环迭代时都会将已经存入合并数据的
data_final重置为空DataFrame,最终只会保留最后一次循环读取的CSV数据,效果上看起来就像循环只执行了一次。 - 补充说明:pandas 1.4+版本已经将
append方法标记为弃用,更高版本会直接移除该方法,更推荐使用pd.concat做数据合并。
修正后代码
基础修正版(适配原有写法逻辑)
import pandas as pd csvs = [ "2014-2015.csv", "2015-2016.csv", "2016-2017.csv", "2017-2018.csv", "2018-2019.csv", "2019-2020.csv", "2020-2021.csv", "2021-2022.csv" ] # 初始化放在循环外部 data_final = pd.DataFrame() for csv in csvs: data = pd.read_csv(csv) data_final = pd.concat([data_final, data], ignore_index=True)
更高效的写法(推荐)
先把所有DataFrame存入列表再一次性合并,避免循环中多次合并产生的性能损耗:
import pandas as pd csvs = [ "2014-2015.csv", "2015-2016.csv", "2016-2017.csv", "2017-2018.csv", "2018-2019.csv", "2019-2020.csv", "2020-2021.csv", "2021-2022.csv" ] df_list = [] for csv in csvs: df_list.append(pd.read_csv(csv)) # 一次性合并所有数据,ignore_index=True可以重置行索引避免重复 data_final = pd.concat(df_list, ignore_index=True)
内容的提问来源于stack exchange,提问作者Asutherland8219
相关产品推荐
相关产品推荐

