我解析包含HTTP交易成熊貓數據幀的一些日誌。每行都是一個trasaction,所以一列有IP地址,另一列有主機名等。對於每一行(日誌條目),我想將標題參數提取到一個列表中,並將該列表與其餘的該行的信息。最佳的方式小列表添加到大熊貓數據幀
的問題是:如何存儲的參數列表,以便它可以從日誌中的數據的其餘部分很容易交叉引用?
例如起見,假設我有這樣的數據幀,其中用戶的寵物列表存儲作爲一個字符串,我們要分析出動物個體,並將其存儲爲列表。這個想法是存儲解析字符串的結果,以便實際的解析例程只需運行一次。
# Original Dataframe
User | PetsString
----------------------
Mary | 'dog/cat/rat'
John | 'dog/lizard'
方法1)我可以列添加到數據幀,並存儲在此列清單。
User | PetsString | PetsList
--------------------------------------------
Mary | 'dog/cat/rat' | ['dog','cat','rat']
John | 'dog/lizard' | ['dog','lizard']
方法2)我可以創建具有列表條目,以表示日誌的原始數據幀爲紹興德勝回參考位置的列中的另一數據幀。我想避免這種情況,因爲我認爲同時迭代兩個數據幀比迭代單個大型列表要慢。例如。
User | PetsString
-----------------------
Mary | 'dog/cat/rat'
John | 'dog/lizard'
#Separate DataFrame for cross-reference
User | Pet
-----------------
Mary | 'dog'
Mary | 'cat'
Mary | 'rat'
John | 'dog'
John | 'lizard'
方法3)有人建議增加,比方說,50列,以我現有的數據幀和存儲在其中一列各列表項。我不希望有超過50個標題參數。這似乎是速度最優的,但在列數方面有着令人討厭的限制。例如。
User | PetsString | Pet0 | Pet1 | Pet2
------------------------------------------------------
Mary | 'dog/cat/rat' | 'dog' | 'cat' | 'rat'
John | 'dog/lizard' | 'dog' | 'lizard' |
我有兩個問題:
(I)假設我需要計算將讀取一行,並從相應的列表中,三種佈局的是速度,最優的所有參數的函數?
(ⅱ)哪一個是空間最優?我不確定熊貓如何處理對象,但我相信如果使用方法1,熊貓將創建一個與最長列表一樣寬的列。類似地,方法3將不得不爲全「Pet2」列分配空間,即使John沒有一個空間,等,但即使是權衡的一個大致的瞭解,對我就是
在此先感謝您的幫助是非常有用的!
感謝您的迴應!現在我可以看到,字符串列表對熊貓來說並不是那麼好。 Numpy有一個固定寬度字符串的數據類型,但是在使用Pandas時,它們被存儲爲'object'類型,所以在我的情況下,Pandas的速度增益並沒有太大的提高。在這一點上我堅持下去,因爲我已經寫了一半的代碼來使用熊貓。 – Max