【发布时间】:2019-02-16 23:52:10
【问题描述】:
我在 Python 中创建了一个 .txt 文件目录列表,然后编写了一个函数来组合这些目录。
def combine_directory_txt(FilePaths):
"""
This function will combine all files in a directory by importing each,
and appending them to a single output. It only works for csv's (.txt) with
a delimeter of "|"
"""
Output = pd.DataFrame() # Dataframe which will store the final table
Increment = 0
Total = len(FilePaths)
# Import each file and join them together
for file in FilePaths:
Increment += 1
Import = pd.read_csv(file, sep = '|', error_bad_lines = False,
low_memory = False, encoding='mbcs' )
Output = Output.append(Import)
print (Increment, " of ", Total, " joined")
del Import
return Output
这很好用,除了我的电脑遇到了 MemoryErrors。有没有更有效的方法来做到这一点?我意识到我已经使用了“low_memory = false”,这个过程将每月重复一次,所以我不知道列会是什么样子,而且由于所有 dtype 警告,我的代码很早就失败了。这是正确的方法吗?我是否应该编写代码来确定 dtypes 是什么,然后分配它们以减少内存?
【问题讨论】:
-
明确设置 dtypes 会有所帮助,特别是如果您知道某些属性的范围。但是,如果你真的有很多数据和有限的内存,最终你会遇到麻烦。相反,我建议研究是否有必要拥有一个大型数据框。如果使用此数据帧的代码一次访问一个较小的数据帧,可能会多次访问它们,它可以工作吗?代码是否真的需要数据框中的所有数据,或者它是否可以使用其列的子集或从每个数据框中汇总的信息?
-
所有 CSV 文件的格式是否相同?即相同的标题/列
-
@lightalchemist 我正在尝试输出一个要在其他地方处理的文件,所以我正在尝试制作一个可以导出的数据框。
-
@MartinEvans 所有文件的格式都相同,是的,但我不知道它们是否每次都是相同的标题。但是,每次运行时,所有 CSV 都将具有相同的标题。我希望这很清楚?
标签: python csv memory-management append