Python将包含科学值和浮点值的熊猫数据框与浮点数相乘

Posted

技术标签:

【中文标题】Python将包含科学值和浮点值的熊猫数据框与浮点数相乘【英文标题】:Python mutiply pandas dataframe containing scientific and float values with a float 【发布时间】:2021-04-16 18:06:12 【问题描述】:
import pandas as pd 

df=pd.DataFrame(‘years’:[‘Y0’,‘Y1’,’Y2’,’Y3’],‘price1’:[0.01, 0.0029,0.00368,0.00439536],
‘price2’:[0.02, 0.001, 9.161781253394068e-04,0.001718])

df.iloc[1:,1:] = df.iloc[1:,1:].mul(0.75)

由于 df 中的科学值而出现错误,如果有人有任何建议或帮助解决此问题,请告诉我?

错误:

TypeError: Could not operate 0.75 with block values can’t multiply sequence by non-int of type ‘float’

【问题讨论】:

我无法重现错误:( 您可以尝试使用这些值从 csv 文件加载到 df,然后在相乘时会出错 @Peter df.dtypes 的输出是什么? 【参考方案1】:

你可以试试下面的方法吗?

df=pd.DataFrame("years":["Y0","Y1","Y2","Y3"],
                 "price1":[0.01, 0.0029,0.00368,0.00439536], 
                 "price2":[0.02, 0.001, float("9.161781253394068e-04"),0.001718])

df.iloc[1:,1:] = df.iloc[1:,1:].mul(0.75)

【讨论】:

谢谢 berkayln,科学记数法值可以出现在 df 中的任何位置。那么有没有办法将整个数据框转换为浮动,除了第一行和第一列 是的:df.astype('price1': 'float64',"price2":"float64") 但这仍然会将 price1, price 2 中的第一行转换为浮动,但我不希望它们浮动,因为它们在我的应用程序中使用特定格式,所以任何简单的方法都可以做到这一点 0.01 已经是浮男了:D 我实在看不懂。【参考方案2】:

我猜你遇到这个问题是因为类型。您可以尝试将列转换为浮点类型-

import pandas as pd

df=pd.DataFrame('years':['Y0','Y1','Y2','Y3'],'price1':[0.01, 0.0029,0.00368,0.00439536], 'price2':[0.02, 0.001, 9.161781253394068e-04,0.001718])

# converting dtype
df['price1'] = pd.to_numeric(df['price1'], errors='coerce')
df['price2'] = pd.to_numeric(df['price2'], errors='coerce')
df.iloc[1:,1:] = df.iloc[1:,1:].mul(0.75)

【讨论】:

以上是关于Python将包含科学值和浮点值的熊猫数据框与浮点数相乘的主要内容,如果未能解决你的问题,请参考以下文章

Python数据格式:%s字符串,%d整型,%f浮点型

删除 kotlin android 中浮点值的科学记数法格式

对于包含无效值的数据集,我应该使用浮点的 NaN 还是浮点 + bool?

当两个数据框都包含重复键时,如何将两个熊猫数据框与左连接合并?

python 格式化字符串有啥用

Python格式化字符 %s %d %f