找到解决方案:我需要更改数据帧的数据类型:
for p in periods:
df['Probability{}'.format(p)] = 0
for p in periods:
df['Probability{}'.format(p)] = float(0)
或者按照下面批准的答案进行操作。
<小时/>我将单元格的新值断言为 float ,但它们被设置为整数,我不明白为什么。 它是数据挖掘项目的一部分,其中包含嵌套循环。
我使用的是 Python 3。
我尝试了用 pandas 写入单元格的不同模式:
df.at[index,col] = float(val)
,
df.set_value[index,col,float(val)]
,以及
df[col][index] = float(val)
但他们都没有提供解决方案。我得到的输出是:
In: print(df[index][col])
Out: 0
In: print(val)
Out: 0.4774410939826658
这是循环的简化版本
periods = [7,30,90,180]
for p in periods:
df['Probability{}'.format(p)] = 0
for i in range(len(df.index)):
for p in periods:
if i >= p - 1:
# Getting relevant data and computing value
vals = [df['Close'][j] for j in range(i - p, i)]
probability = (len([j for j in vals if j>0])/len(vals))
# Asserting value to cell in pd.dataframe
df.at[df.index[i], 'Probability{}'.format(p)] = float(probability)
我不明白为什么 pandas.DataFrame 将 float 更改为整数并向上或向下舍入。当我直接在控制台中向单元格断言值时,我没有遇到任何问题。
这个问题有解决办法吗?
在嵌套 for 循环之前,我没有遇到任何问题,以避免硬编码大量琐碎的代码。
注意:似乎如果我进行因式分解,例如对于 100 * val = new_val
,它只对四舍五入的数字进行因式分解。因此,如果我乘以 100*val = new_val = 0
,因为数字向下舍入为 0
。
我还尝试更改数据框的数据类型:
df = df.apply(pd.to_numeric)
祝一切顺利。
最佳答案
数据框中的数据类型似乎不正确。您上次尝试转换整个 df 可能已经非常接近了。尝试并使用
df['Close'] = pd.to_numeric(df['Close'], downcast="float")
关于python - 如何在 pandas dataframe (Python) 中将单元格的新值设置为 float - 在嵌套 for 循环中时,DataFrame 将舍入为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57495796/