我看不出read_fwf
在Pandas中有什么用。为什么我要用它来代替支持自定义分隔符的read_csv
呢?我试着对一个大型固定列宽文件的速度进行测试,read_csv
要快得多:
data = ("colum1 column2222 column3333 column4\n"
"id8141 360.242940 149.910199 11950.7\n"
"id1594 444.953632 166.985655 11788.4\n"
)
colspecs = [(0, 6), (8, 20), (21, 33), (34, 43)]
data = data * 10000000
with open("big_file.txt", "w") as f:
f.write(data)
start_time = time.time()
df = pd.read_csv("big_file.txt", header=None, dtype={"colum1": str, "column2222": float, "column3333": float, "column4":float}, sep="\s+")
print(f"--- {time.time() - start_time} seconds ---")
--- 4.0295188426971436 seconds ---
start_time = time.time()
df = pd.read_fwf("big_file.txt", header=None, colspecs=colspecs,
dtype={"colum1": str, "column2222": float, "column3333": float, "column4":float})
print(f"--- {time.time() - start_time} seconds ---")
--- 77.41955280303955 seconds ---
1条答案
按热度按时间daolsyd01#
我不认为PandasAPI中
read_fwf
函数的存在是出于 * 美学目的 *。核心开发人员让我们可以访问这个函数,因为在某些情况下,它是正确阅读文本文件作为DataFrame的唯一有效方法。我可以看到的一个例子(
read_fwf
在这里派上了用场)是下面的(.txt
)文件:除非您使用 *magic/regex分隔符 *,否则
read_csv
无法正确解析这3列。