改之前
root = 'D:\\Mahong2018'
files = os.listdir(root)#使用os.listdir(root)获取指定目录下的所有文件名,并存储在变量files中
df = pd.DataFrame()
for file in files:
position = root + '\\' + file
print(position)
data=pd.read_csv(position, sep='\t', encoding='utf-8',header=0)#,error_bad_lines=False,skiprows=[0],
df=pd.concat([df,data])
print(df)
#df.to_excel('D:\\2018所有.xlsx',index=False)#行数太多,excel不能保存那么多行(Max sheet size is: 1048576, 16384)
df.to_csv('D:\\2018所有.txt', sep='\t',index=False)
问题:我的文件夹里有6000个txt,读到一半的时候速度很慢(后面还会越来越慢)
原因:在每次循环中都创建了新的DataFrame对象,导致内存消耗和操作时间不断增加。
解决办法:使用列表推导式将所有读取的DataFrame对象存放在列表中,最后通过concat()
函数一次性将它们合并为一个DataFrame对象
改之后
root = 'D:\\Mahong2019'
files = os.listdir(root)
start_time = time.time()
df_list = []
for file in files:
position = root + '\\' + file
print(position)
data=pd.read_csv(position, sep='\t', encoding='utf-8',header=0)#,error_bad_lines=False,skiprows=[0],
df_list.append(data)
df = pd.concat(df_list, ignore_index=True)#ignore_index=True用于重新生成索引
print(df)
#df.to_excel('D:\\Data-Mahong\\2018所有.xlsx',index=False)#行数太多,excel不能保存那么多行(Max sheet size is: 1048576, 16384)
df.to_csv('D:\\2019所有.txt', sep='\t',index=False)
转化结果
后记:这两个程序都能用,我觉得数据量小的情况下第一种更好理解一点