2017-09-03 51 views
0

爲了消除測量時的變化,我想編譯一個特定的範圍。熊貓:數值列名彙總,替換時出錯

例如,我想在整數的±0.1範圍內求和列名,並將其分配給一個整數列。但是,由於形狀錯誤,我無法替代。

我認爲這是由轉換列的類型引起的,但是我應該怎麼做呢?

謝謝。

import pandas as pd 
import numpy as np 

df = pd.DataFrame(data= np.arange(0,10000,1).reshape(100,100)) 
df.columns = np.arange(0,10,0.1) 

print(df.head()) 
df.columns = df.columns.astype(float) 
temp = df.columns.values 

for n in np.arange(1, 9, 1): 
l = n - 0.1 
m = n + 0.1 
calc_n = temp[np.where((temp >= l) & (temp <= m))] 
calc = np.sum(df[df.columns.intersection(calc_n)], axis=1) 
n_position = temp[np.where(temp == n)] 
df[n_position] = calc.values 

ValueError異常:形狀不匹配:形狀(100,)的值陣列不能被廣播到形狀(1100)的索引結果

回答

0

的ValueError異常是因爲n_position是一個數組。所以df[n_position]爲您提供了一個數據框而不是一個列。

將浮點數作爲索引通常不是一個好主意。比較花車時你應該小心。這條線calc_n = temp[np.where((temp >= l) & (temp <= m))]並不總是給出準確的結果。

對於起動器,嘗試:

for n in np.arange(1, 9, 1): 
    margin = 0.101  # set your own margin 
    calc_n = np.where(np.abs(temp-n) < margin) 
    df[n] = df.iloc[:,calc_n[0]].sum(axis=1) 
+0

df.iloc [:,計算值 - N [0]]。總結這是一個很好的解決方案。 下次我不會使用flot。 非常感謝。 –