有缺失數據的處理我有一個數據集,如:在一列文本文件
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行的數據集(在普通的臺式計算機中)也消耗大量內存。 –