背景 我处理一个打印出数字列的csv数据表。我正在开发一个程序,该程序将采用第一列,向用户询问浮动时间(即45小时半= 45.5),然后从第一列中减去该数字。我在这方面取得了成功。现在,我需要找到“零”时间点的行索引。我用min来找到那个索引,然后从下面的A1列调用它。我需要在时间0找到读数然后将A1标准化,以便在图表上,在0时间点,A1列中的读数为1(最后所有后续列,但对我来说是婴儿步骤)
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
。
我的问题:
NaN
?示例
看起来像这样的数据框 !http://i.imgur.com/ObUzY7p.png 零时间设置正确(图像未显示)
分割柱后答案 0 :(得分:1)
这应该有效:
df['A1.1']=df['A1.1']/df['A1.1'].min()
我认为df[' A1.1'] = df[' A1.1']/r1
无效的原因是因为r1
是一个系列。尝试使用r1?
代替type(r1)
,pandas会告诉您r1
是一个系列,而不是单个浮点数。
要一次尝试,你必须迭代每一列,如下所示:
for c in df:
df[c] = df[c]/df[c].min()
答案 1 :(得分: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,你的列中的值是否可能是浮点数或整数以外的值?