2017-05-15 24 views
0

我有一個數據框,其中包括有關受訪者行爲的二元變量以及與每位受訪者相關的權重。我想將分數乘以每個受訪者的體重,這樣我就可以很容易地得到總體行爲的加權平均值。將列乘以數據框......但值是字符串?

最簡單的方法是將權重列乘以循環中的另一列,如df.columns[761]*df.columns[i]。然而,當我嘗試這樣做時,它會拋出以下錯誤:

'無法將序列乘以'str'類型的非整數。

我不應該有任何條件,但在離機會也有,我試圖df轉換爲數值,像這樣df.apply(pd.to_numeric, errors='coerce')

但問題仍然存在。我在我的智慧結束。有沒有解決方法?我應該逐行進行(如果是,我是否需要遍歷每一列,還是有一個很好的乾淨的方式?)。

+0

你知道這個方法失敗的行/值嗎?如果是這樣,你可以發佈他們是什麼? – Robbie

+1

不給[mcve]的許多缺點之一是很難知道你是否真的按照你所說的做過。例如,聽起來你想要乘以兩列,但是'df.columns [761] * df.columns [i]'不會這樣做 - 它會嘗試乘以兩列*名稱*。請編輯以包含工作(即_failing_)示例。 – DSM

+0

謝謝 - 這確實是我的問題。正式注意:) – kodachrome

回答

2

你總是可以拆分你的數據幀。

for col in df.columns: 
    for index, k in enumerate(df[col]): 
     try: 
      float(k) 
     except: 
      # Print out the row number, col and row value that's failing 
      print(index, col, k) 

這完全有可能是你的字符串/無類型導致你的乘法。

還有df[col].apply(float)但它不會捕獲這些錯誤的行。

+0

謝謝 - 這是一個很好的解決方案,但不幸的是,它沒有支撐任何錯誤的行。 – kodachrome