尝试用一个float来划分一个dataframe列会产生NaN

2024-04-16 23:06:50 发布

您现在位置:Python中文网/ 问答频道 /正文

背景 我处理一个csv数据表,它打印出一列列数字。我正在开发一个程序,它将获取第一列内容,向用户请求一个浮点时间(即45.5小时=45.5),然后从第一列中减去这个数字。我在这方面取得了成功。现在,我需要找到“零”时间点的行索引。我使用min来找到该索引,然后从下面的A1列中取消该索引。我需要找到时间0时的读数,然后将A1规范化,以便在图表上,在0时间点,A1列中的读数为1(最终,除了我的小步骤外,所有后续列都是1)

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

到目前为止,设置零点时间效果很好。在

^{pr2}$

这就是我遇到麻烦的地方。第一行将正确地标识一个系列,我可以从中为我的所有其他专栏。Next r1正确地标识了正确的A1.1值,当我使用type(r1)时,这个值是一个浮点值。 但是,当我除以df[' A1.1']/r1时,它只产生一个正确的值,而这个值就是r1/r1 = 1的地方。所有其他值都出来NaN。在

我的问题:

  1. 我想怎样用浮点数来划分一列呢?为什么我得到NaN?在
  2. 有没有一个更快的方法来做这件事,因为我需要做16列(即'A2/r2''a3/r3'等)
  3. 在重新保存数据之前,是否需要在任何地方执行in place=True操作?还是只用于添加/删除行?在

示例

像这样的数据帧 !http://i.imgur.com/ObUzY7p.png 零点时间设置正确(未显示图像)

分栏后 !http://i.imgur.com/TpLUiyE.png


Tags: to数据dftimea1地方时间数字
2条回答

这应该是有效的:

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

我认为df[' A1.1'] = df[' A1.1']/r1不起作用是因为{}是一个系列。尝试r1?而不是{},pandas会告诉你{}是一个序列,而不是一个单独的浮点数。在

要一次完成,必须迭代每个列,如下所示:

^{pr2}$

如果要将列中的每个值除以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)

所以你可能想要这样的东西:

^{pr2}$

这只回答了你问题的第二部分。Apply可能是在多行和多列上快速运行函数的最佳选择。至于为什么在除以float时得到nan,列中的值可能不是float或integer吗?在

相关问题 更多 >