2017-04-23 57 views
0

什麼是從字符串數組像這樣得到的最簡單的方法:字符串數組用字列數據幀

arr = ['abc def ghi', 'def jkl xyz', 'abc xyz', 'jkl xyz'] 

的數據幀,其中每列是一個字,每行包含0或1,具體取決於如果該字出現在字符串中。事情是這樣的:

abc def ghi jkl xyz 
0 1 1 1 0 0 
1 0 1 0 1 1 
2 1 0 0 0 1 
3 0 0 0 1 1 

編輯:這裏是我的方法,這對我來說似乎是一個很多蟒蛇循環,而不是使用內置的大熊貓功能

labels = (' ').join(arr) 
labels = labels.split() 
labels = list(set(labels)) 
labels = sorted(labels) 

df = pd.DataFrame(np.zeros((len(arr), len(labels))), columns=labels) 
cols = list(df.columns.values) 

for i in range(len(arr)): 
    for col in cols: 
     if col in arr[i]: 
      df.set_value(i, col, 1) 
+0

抱歉,本網站不是爲了解決您的任務,而是爲了解決您在解決問題時出現的問題。 那麼,你的代碼到目前爲止看起來如何? –

+0

我在問題中包含了我自己的代碼,該代碼可行,但看起來像很多手動Python循環。我想可能有更簡單的方法來做到這一點熊貓 – pietz

回答

3

編輯 - 減少到3條必不可少線:

import pandas as pd 

arr = ['abc def ghi', 'def jkl xyz', 'abc xyz', 'jkl xyz'] 

words = set(' '.join(arr).split()) 
rows = [ { w : int(w in e) for w in words } for e in arr ] 
df = pd.DataFrame(rows) 

print(df) 

結果:

abc def ghi jkl xyz 
0 1 1 1 0 0 
1 0 1 0 1 1 
2 1 0 0 0 1 
3 0 0 0 1 1 
+0

感謝和抱歉,現在包括我的代碼從一開始。你的運行速度比我的快一點 – pietz

+0

當然。你可以通過直接在行列表理解的結果上創建DataFrame來將它減少到2行,但是這樣更具可讀性:) – TLousky

+1

@pietz如果此解決方案有幫助,請接受它(勾選標記到邊)以確認分辨率。 – Parfait