有缺失数据的处理我有一个数据集,如:在一列文本文件
IM,XX
IS,YY
SG,3
OTPL,90
TTPL,90
IM,AA
IS,BB
SG,3
TTPL,50
IM,ZZ
IS,CC
OTPL,10
每一行包含key,value
对,我需要将其转换成表格的形式,以便进行一些分析。变量IM
表示行的索引,下面的参数是列。对我来说,棘手的部分是考虑到可能缺失的值。预期的结果是:
IM IS OTPL SG TTPL
XX YY 90 3 90
AA BB null 3 50
ZZ CC 10 null null
“注意空值”。
我有一个解决方案,但没有那么高效,当数据集非常大时,它不是一个合适的方法。我用下面的策略:
随着
awk
,添加一个额外的指数每个寄存器(行)。它创建了一个计数器n
当出现IM
增加它:$ awk -F, 'BEGIN{n = 0}{ if($1 == "IM"){n += 1} print n","$0}' inputdata.txt 1,IM,XX 1,IS,YY 1,SG,3 1,OTPL,90 1,TTPL,90 2,IM,AA 2,IS,BB 2,SG,3 2,TTPL,50 3,IM,ZZ 3,IS,CC 3,OTPL,10
接下来,读取使用
pandas
,应用由上述指标groupby
先前的结果,并创建应用concat
到pivot
子表的新表:In[1]:import pandas as pd gb = pd.read_csv("outdata.txt", names = ["id","key","value"]).groupby("id") res = pd.concat([df.pivot(index="id", columns='key', values='value') for g, df in gb]) res Out[1]: IM IS OTPL SG TTPL id 1 XX YY 90 3 90 2 AA BB NaN 3 50 3 ZZ CC 10 NaN NaN
最后一步非常昂贵。
有没有人有类似的问题?只有用命令行才能解决这个问题。
提前致谢!
所以你的目标是做仅使用shell命令对这些数据的分析(即,“只使用命令行”)?我想这并不清楚为什么你的'熊猫'解决方案对你来说不够好。你的数据集有多大? – dbliss
我假设数据的顺序非常重要,并且顺序的改变可能会破坏结果。 – Alexander
我认为这必须是使用shell命令或其他工具的更高效方式。当我如上所述使用'pandas'时,这个操作需要大约10秒钟的时间,只有1000行的数据集(在普通的台式计算机中)也消耗大量内存。 –