python - 如何在 pandas dataframe (Python) 中将单元格的新值设置为 float - 在嵌套 for 循环中时,DataFrame 将舍入为整数

标签 python pandas dataframe for-loop

找到解决方案:我需要更改数据帧的数据类型:

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/

相关文章:

python - 我怎样才能缩短这个Python代码?

python - 如何在 Python 中创建数据框数组

python - 在groupby之后找到具有对应值的nlargest(2)

python - 如何有效地复制 pandas 行,仅更改一列?

python - 函数未执行(逻辑语句的一部分)

python plot 和 powerlaw 适合

python - 我怎样才能自己结束一个循环?

python - 将 Celery Django 任务分散到 24 小时内

python - 使用 resample 和 groupby - pandas 计算时间序列的百分位数/四分位数

python - 从 DatetimeIndex 中选取特定时间范围内的时间戳