2016-10-16 94 views
1

我是python的新手,有時會遇到一些操作困惑 我有一個數據幀ro,我也使用特定的列PN 3D過濾了這個數據幀一個特定的值921和我分配的結果成使用下面的代碼名爲headlamp新的數據幀:如何將一片數據幀轉換爲一個新的數據幀

headlamp = ro[ro['PN 3D']=="921"] 

請問我的頭燈也是據幀或僅僅是一個? 我問這個問題的原因是因爲我稍後在腳本中收到了一些奇怪的警告和結果。

,我創建了一個名爲word和我分配新列headlamp

headlamp['word'] = "" 

我得到以下警告:

A value is trying to be set on a copy of a slice from a DataFrame 

後,我用下面的腳本來分配結果到headlamp['word']

i = 0 
for row in headlamp['Comment'].astype(list): 
    headlamp['word'][i] = Counter(str(row).split()) 
i+=1 
print headlamp['word'] 

同樣的警告出現了,它影響了我的結果,因爲當我使用headlamp.tail()時,最後一行headlamp['word']是空的。

有沒有人有一個想法是什麼問題以及如何解決?

任何幫助將高度讚賞

+0

'頭燈= RO [RO [ 'PN 3D'] ==「921 「] .copy()' – MaxU

+0

如果'headlamp'是一個數據框,你應該給一個col指定一個'series'對象這不僅僅是一個空的字符串。像'headlamp ['word'] = pd.Series(...)' –

+0

謝謝你的回覆。我已經使用這個'.copy()',並且我有相同的警告和錯誤@MaxU。關於您的回覆@TammoHeeren,我也爲所有行分配了0個值到列'word',但是在應用腳本後,前燈中的行['Comment']: 'i = 0 headlamp ['word '] [i] =(Counter(str(row).split())) i + = 1 headlamp ['word'] i = 0 for headlamp ['Comment']: headlamp ['word '] [i] =(Counter(str(row))。分開())) i + = 1 print headlamp ['word']' –

回答

0

使用.loc

headlamp = ro.loc[ro['PN 3D']=="921"] 

至於其他的,你的意見......我很困惑。但是,這是我最好的猜測

設置

import pandas as pd 
from string import ascii_lowercase 

chars = ascii_lowercase + ' ' 
probs = [0.03] * 26 + [.22] 

headlamp = pd.DataFrame(np.random.choice(list(chars), (10, 100), p=probs)).sum(1).to_frame('comment') 
headlamp 

enter image description here

headlamp['word'] = headlamp.comment.str.split().apply(lambda x: pd.value_counts(x).to_dict()) 
headlamp 

enter image description here

+0

謝謝@piRSquared,它似乎與'.loc'一起工作的警告,但我仍然面臨一個問題,如果你能幫助,我將不勝感激。 'I = 0 用於前照燈行[' 註釋 ']: headlamp.loc〔I' 單詞'] =(計數器(STR(行).split())) I + = 1個 打印前照燈[ 'word']',並且出現以下錯誤:'ValueError:在使用迭代器設置時必須具有相等的len鍵和值' 您知道哪裏可能是問題? –

+0

讓我再次寫腳本 'i = 0 for headlamp ['Comment']:headlamp.loc [i,'word'] =(Counter(str(row).split()))i + = 1 ' –

+0

我試圖通過計算我的數據框中每一行的'Comment'列上每個單詞的出現次數來創建字段'word'的字典 –

相關問題