2016-12-30 82 views
-1

背景 我處理打印出數字列的csv數據表。我正在研究一個程序,該程序將採用第一列,向用戶請求浮動時間(即45小時半= 45.5),然後從第一列中減去該數字。我在這方面取得了成功。現在,我需要找到「零」時間點的行索引。我使用min來查找該索引,然後從下面的A1列中調用該索引。我需要時間0找到的讀數,然後歸A1,以使在圖上,在0時間點的讀數列是1 A1(最終所有後續列,但嬰兒的步驟對我來說)試圖通過浮點數分割數據幀列產量NaN

time_zero = float(input("Which time would you like to be set to 0?")) 
df['A1']= df['A1']-time_zero 

迄今爲止設置零時間的效果很好。

zero_location_series = df[df['A1'] == df['A1'].min()] 
r1 = zero_location_series[' A1.1'] 
df[' A1.1'] = df[' A1.1']/r1 

這是我遇到麻煩的地方。第一行將正確地確定一系列我可以從其他所有專欄中刪除的內容。接下來r1正確標識了正確的A1.1值,當我使用type(r1)時,此值爲浮點數。 但是,當我劃分df[' A1.1']/r1時,它只會產生一個正確的值,該值是r1/r1 = 1。所有其他值出來NaN

我的問題:

  1. 如何劃分一個float我猜列?我爲什麼得到NaN
  2. 有沒有更快的方法來做到這一點,因爲我需要做16列這樣做(即'A2/R2''A3/R3'等)
  3. 我需要做inplace = True在任何地方做操作在重新保存數據之前堅持使用?還是僅用於添加/刪除行?

數據框,看起來像這樣 ! http://i.imgur.com/ObUzY7p.png 正確設置零時間(圖片未顯示)

將分隔後的列 ! http://i.imgur.com/TpLUiyE.png

+1

你能告訴一個自包含的例子證明了什麼問題? – BrenBarn

+0

當其中一個操作數是'NaN'時,您經常可以獲得'NaN' – user86895

回答

0

如果要通過R1在列中的每個值除以這是最好的應用,例如:

import pandas as pd 
df = pd.DataFrame([1,2,3,4,5]) 
# apply an anonymous function to the first column ([0]), divide every value 
# in the column by 3 
df = df[0].apply(lambda x: x/3.0, 0) 
print(df) 

所以你可能想是這樣的:

df = df["A1.1"].apply(lambda x: x/r1, 0) 

這真的只回答你問題的第2部分。快速應用可能是您在多行和多列上運行函數的最佳選擇。至於爲什麼用浮點數除法會得到nans,有沒有可能列中的值不是浮點數或整數?

+0

這可行!我現在有一個新問題,但我想我可以自己解決這個問題(使用min()當我想要最小> 0分鐘時)。對不起,我花了這麼長時間回覆(高估了假期的工作時間),非常感謝你的幫助。 –

1

這應該工作:

df['A1.1']=df['A1.1']/df['A1.1'].min() 

我想原因df[' A1.1'] = df[' A1.1']/r1沒有工作是因爲r1是一個系列。嘗試r1?而不是type(r1)和熊貓會告訴你,r1是一個系列,而不是一個單獨的浮點數。

要做到這一點的一個嘗試,你必須遍歷每個列,例如:

for c in df: 
    df[c] = df[c]/df[c].min()