2016-04-13 227 views
0

我有一個包含12列的熊貓數據框。一列是useragent字符串,我想提取os,browser和....等信息,並根據這些值向數據框添加新列。 列平臺在當前數據框中不存在,我想將其添加到位。如何根據字典鍵向熊貓數據框添加列?

a b c  useragent 
1 3 5 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" 

a b c  useragent    os  platform 
1 3 5  same as before   windows Null 

for i in range(len(df["useragent"])): 
    try : 
     df['platform'].iloc[i] = httpagentparser.detect(df["useragent"].iloc[i])['platform']['name'] 
    except : 
     continue 

我要添加列OS平臺基於從解析器值數據框。 該問題首先是在嘗試未執行後的第一次分配。 我把這個任務放在try塊中,因爲從解析器返回的字典沒有總是相同的密鑰。例如,如果返回字典中不存在關鍵字os,則該索引的新列os應該爲空。 如何以有效的方式完成整個過程?

+1

你可以添加[最小的,完整的和可驗證的示例](http://stackoverflow.com/help/mcve )? – jezrael

+0

我加了一個例子 – Kaggle

回答

1

它不工作的原因是您無法在DataFrame上設置切片的副本(此警告與try/except一起隱藏)。

您可以放心地做在同一行與您的數據幀中的所有行:

df['platform'] = df.apply(
    lambda k: httpagentparser.detect(k['useragent']).get('platform', {}).get('name'), 
    axis=1 
) 
+0

Thx求助!我想給信貸,但似乎我不允許:) – Kaggle

+0

你仍然可以[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work )如果這是你尋找的東西:) – fernandezcuesta

+0

對不起。不知道! – Kaggle

相關問題