2016-12-30 70 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()