当前位置: 首页 > 面试题库 >

如何预处理“大数据” tsv文件并将其加载到python数据框中?

咸育
2023-03-14
问题内容

我目前正在尝试将以下大的制表符分隔的文件导入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()。你会怎么做?可以使用哪种预处理工具sedawk

由于数据的大小和加载到数据帧之前必须进行的格式化,这是一个具有挑战性的问题。任何帮助表示赞赏。


问题答案:

$ cat > pandas.awk
BEGIN {
PROCINFO[“sorted_in”]=”@ind_str_asc” # traversal order for for(i in a)
}
NR==1 { # the header cols is in the beginning of data file
# FORGET THIS: header cols from another file replace NR==1 with NR==FNR and see * below
split($0,a,” “) # mkheader a[1]=first_col …
for(i in a) { # replace with a[first_col]=”” …
a[a[i]]
printf “%6s%s”, a[i], OFS # output the header
delete a[i] # remove a[1], a[2], …
}
# next # FORGET THIS * next here if cols from another file UNTESTED
}
{
gsub(/: /,”=”) # replace key-value separator “: ” with “=”
split($0,b,FS) # split record from “,”
for(i in b) {
split(b[i],c,”=”) # split key=value to c[1]=key, c[2]=value
b[c[1]]=c[2] # b[key]=value
}
for(i in a) # go thru headers in a[] and printf from b[]
printf “%6s%s”, (i in b?b[i]:”NaN”), OFS; print “”
}


数据样本(pandas.txt):

Col_01 Col_20 Col_21 Col_22 Col_23 Col_25
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

$ awk -f pandas.awk -pandas.txt
Col_01 Col_20 Col_21 Col_22 Col_23 Col_25
    14     25  23432 639142    NaN    NaN 
     8     25    NaN  25134 243344    NaN 
    17    NaN     75      5  79876 634534 
    19     25  32425    NaN 989423    NaN 
    12     25  23424 342421      7     67 
     3     95  32121    NaN    NaN 111231

所有需要的列应该在数据文件头中。在处理过程中收集标头可能不是一件大事,只是将数据保留在数组中并最终打印(可能在版本3中)。

如果您从cols.txt与数据文件(pandas.txt)不同的文件()中读取标头,请执行脚本(pandas.awk):

$ awk -F pandas.awk cols.txt pandas.txt


 类似资料:
  • 问题内容: 我是python和pandas的新手。我正在尝试将文件加载到熊猫中。 这是我正在尝试的错误,也是我得到的: 问题答案: 注 :由于17.0气馁:使用替代 文档列出了一个.from_csv函数,该函数似乎可以执行您想要的操作: 如果您有标题,则可以传递。

  • 我想从InstaCart https://www.InstaCart.com/datasets/grocery-shopping-2017加载大型.csv(3.4百万行,20.6万用户)开源数据集 基本上,我在将orders.csv加载到Pandas数据帧中时遇到了麻烦。我想学习将大文件加载到Pandas/Python中的最佳实践。

  • Data Preparation You must pre-process your raw data before you model your problem. The specific preparation may depend on the data that you have available and the machine learning algorithms you want

  • 在输入的JSON数据中,v的值越高,粒子越亮,并且它们从出发国家到目的国家的运行越快。 (请查阅Michael Chang的文章来 了解他是如何提出这个想法的)。Gio.js库会自动缩放输入数据的范围以便于更好的数据可视化。作为开发人员,您还可以定义自己的预处理数据的方式。

  • 本文向大家介绍python数据预处理 :数据共线性处理详解,包括了python数据预处理 :数据共线性处理详解的使用技巧和注意事项,需要的朋友参考一下 何为共线性: 共线性问题指的是输入的自变量之间存在较高的线性相关度。共线性问题会导致回归模型的稳定性和准确性大大降低,另外,过多无关的维度计算也很浪费时间 共线性产生原因: 变量出现共线性的原因: 数据样本不够,导致共线性存在偶然性,这其实反映了缺

  • 问题内容: 我想知道是否有人对我即将从事的工作有任何经验。我有几个csv文件,它们的大小都在一个GB左右,我需要将它们加载到oracle数据库中。虽然加载后我的大部分工作都是只读的,但我仍需要不时加载更新。基本上,我只需要一个很好的工具即可一次将多行数据加载到数据库中。 到目前为止,这是我发现的内容: 我可以使用SQL Loader来完成很多工作 我可以使用批量插入命令 某种批量插入。 以某种方式