【发布时间】:2017-01-16 20:40:36
【问题描述】:
我目前正在尝试将以下大型制表符分隔文件导入 Python 中的类似数据框的结构中——当然,我使用的是 pandas 数据框,尽管我对其他选项持开放态度。
此文件大小为几 GB,不是标准的 tsv 文件 --- 它已损坏,即行具有不同的列数。一行可能有 25 列,另一行有 21 列。
以下是数据示例:
Col_01: 14 .... Col_20: 25 Col_21: 23432 Col_22: 639142
Col_01: 8 .... Col_20: 25 Col_22: 25134 Col_23: 243344
Col_01: 17 .... Col_21: 75 Col_23: 79876 Col_25: 634534 Col_22: 5 Col_24: 73453
Col_01: 19 .... Col_20: 25 Col_21: 32425 Col_23: 989423
Col_01: 12 .... Col_20: 25 Col_21: 23424 Col_22: 342421 Col_23: 7 Col_24: 13424 Col_25: 67
Col_01: 3 .... Col_20: 95 Col_21: 32121 Col_25: 111231
如您所见,其中一些列的顺序不正确...
现在,我认为将此文件导入数据框的正确方法是预处理数据,以便您可以输出具有NaN 值的数据框,例如
Col_01 .... Col_20 Col_21 Col22 Col23 Col24 Col25
8 .... 25 NaN 25134 243344 NaN NaN
17 .... NaN 75 2 79876 73453 634534
19 .... 25 32425 NaN 989423 NaN NaN
12 .... 25 23424 342421 7 13424 67
3 .... 95 32121 NaN NaN NaN 111231
更复杂的是,这是一个非常大的文件,有几 GB 大小。
通常,我会尝试分块处理数据,例如
import pandas as pd
for chunk in pd.read_table(FILE_PATH, header=None, sep='\t', chunksize=10**6):
# place chunks into a dataframe or HDF
但是,我看不到先以块的形式“预处理”数据,然后使用块将数据读入pandas.read_table() 的方法。你会怎么做?有哪些可用的预处理工具——也许是sed? awk?
这是一个具有挑战性的问题,因为数据的大小和在加载到数据帧之前必须完成的格式设置。任何帮助表示赞赏。
【问题讨论】:
-
您能否预先提供列名的“最大”(最完整的一个 - 即包括所有可能的列名)列表?
-
@MaxU 使用的所有列名的详尽列表?是的,我想是的
-
不确定我是否正确理解了这个问题,但我们在“脏”文件中遇到了类似的问题,我们使用 R 清理数据,然后将新文件传递给 Spark 进行进一步处理。
-
这是一个开始:stackoverflow.com/questions/39331907/… 删除创建 for 循环的字母表并使用帖子末尾所述的列标题。
-
我可能应该,这是 2 天内第三次需要它。等一下,这里快午夜了。
标签: python pandas awk sed dataframe