如何在Pandas DataFrame中将字符串转换为浮点数()

需要在 Pandas DataFrame 中将字符串转换为浮点数吗?
根据场景,你可以使用以下两种方法之一将字符串转换为 Pandas DataFrame 中的浮点数:
(1) astype(float)

df[ 'DataFrame Column'] = df[ 'DataFrame Column'].astype(float)

(2) to_numeric
df[ 'DataFrame Column'] = pd.to_numeric(df[ 'DataFrame Column'],errors='coerce')

在这个简短的指南中,你将看到 3 个场景以及将字符串转换为浮点数的步骤和DataFrame字符串转换为浮点数的方法:
  1. 对于包含存储为字符串的数值的列
  2. 对于同时包含数字和非数字值的列
  3. 对于整个数据
在 Pandas DataFrame 中将字符串转换为浮点数的场景场景 1:数值存储为字符串
为了简单起见,让我们创建一个只有两列的 DataFrame:
ProductPrice
ABC250
XYZ270
下面是在 Python 中创建 DataFrame的代码,其中 'Price' 列下的值存储为字符串(通过在这些值周围使用单引号。请注意,使用双引号将应用相同的概念):
import pandas as pddata = https://www.lsbin.com/{'Product': [ 'ABC','XYZ'], 'Price': [ '250','270'] }df = pd.DataFrame(data) print (df) print (df.dtypes)

在 Python 中运行代码,你将看到'Price' 列的数据类型是Object
Product Price 0ABC250 1XYZ270 Productobject Priceobject dtype: object

目标是将“价格”列下的值转换为浮点数。
然后,你可以使用  astype(float)方法执行到浮点数的转换:
df[ 'DataFrame Column'] = df[ 'DataFrame Column'].astype(float)

在我们示例的上下文中,“DataFrame Column”是“Price”列。因此,DataFrame字符串转换为浮点数示例:
import pandas as pddata = https://www.lsbin.com/{'Product': [ 'ABC','XYZ'], 'Price': [ '250','270'] }df = pd.DataFrame(data) df[ 'Price'] = df[ 'Price'].astype(float)print (df) print (df.dtypes)

你现在将看到“价格”列已转换为浮点数:
ProductPrice 0ABC250.0 1XYZ270.0 Productobject Pricefloat64 dtype: object

场景 2:数字和非数字值
让我们创建一个具有两列(“产品”和“价格”列)的新 DataFrame。只是这一次,“价格”列下的值将包含数字和非数字数据的组合:
ProductPrice
AAA250
BBBABC260
CCC270
DDD280XYZ
这是 DataFrame 在 Python 中的样子:
import pandas as pddata = https://www.lsbin.com/{'Product': [ 'AAA','BBB','CCC','DDD'], 'Price': [ '250','ABC260','270','280XYZ'] }df = pd.DataFrame(data)print (df) print(df.dtypes)

和以前一样,“价格”列的数据类型是对象:
ProductPrice 0AAA250 1BBBABC260 2CCC270 3DDD280XYZ Productobject Priceobject dtype: object

然后,你可以使用  to_numeric方法将“价格”列下的值转换为浮点数:
df[ 'DataFrame Column'] = pd.to_numeric(df[ 'DataFrame Column'], errors='coerce')

通过设置  errors='coerce',你会将非数字值转换为NaN。
这是你可以使用的完整代码:
import pandas as pddata = https://www.lsbin.com/{'Product': [ 'AAA','BBB','CCC','DDD'], 'Price': [ '250','ABC260','270','280XYZ'] }df = pd.DataFrame(data) df[ 'Price'] = pd.to_numeric(df[ 'Price'], errors='coerce')print (df) print(df.dtypes)

运行代码,你将看到“价格”列现在是一个浮点数:
ProductPrice 0AAA250.0 1BBBNaN 2CCC270.0 3DDDNaN Productobject Pricefloat64 dtype: object

为了更进一步,你甚至可以使用df.replace将“NaN”值替换为“0”值:
import pandas as pd import numpy as npdata = https://www.lsbin.com/{'Product': [ 'AAA','BBB','CCC','DDD'], 'Price': [ '250','ABC260','270','280XYZ'] } df = pd.DataFrame(data) df [ 'Price'] = pd.to_numeric(df[ 'Price'], errors='coerce') df = df.replace(np.nan, 0, regex=True)print (df) print(df.dtypes)

这是你会得到的:
ProductPrice 0AAA250.0 1BBB0.0 2CCC270.0 3DDD0.0 Productobject Pricefloat64 dtype: object

场景三:在整个DataFrame下将Strings转化为Floats
Pandas DataFrame将字符串转换为浮点数:对于最后一个场景,让我们创建一个包含 3 列的 DataFrame,其中所有值都将存储为字符串(使用单引号):
import pandas as pddata = https://www.lsbin.com/{'Price_1': [ '300','750','600','770','920'], 'Price_2': [ '250','270','950','580','410'], 'Price_3': [ '530','480','420','290','830'] }df = pd.DataFrame(data)print (df) print (df.dtypes)

如你所见,DataFrame 中所有列的数据类型都是object:
Price_1 Price_2 Price_3 0300250530 1750270480 2600950420 3770580290 4920410830 Price_1object Price_2object Price_3object dtype: object

DataFrame字符串转换为浮点数的方法 - 然后,你可以添加以下语法将所有值转换为整个DataFrame下的浮点数:
df = df.astype(float)

因此,执行转换的完整 Python 代码,DataFrame字符串转换为浮点数示例如下:
import pandas as pddata = https://www.lsbin.com/{'Price_1': [ '300','750','600','770','920'], 'Price_2': [ '250','270','950','580','410'], 'Price_3': [ '530','480','420','290','830'] }df = pd.DataFrame(data) df = df.astype(float)print (df) print (df.dtypes)

整个 DataFrame 下的所有列现在都是浮动的:
Price_1Price_2Price_3 0300.0250.0530.0 1750.0270.0480.0 2600.0950.0420.0 3770.0580.0290.0 4920.0410.0830.0 Price_1float64 Price_2float64 Price_3float64 dtype: object

【如何在Pandas DataFrame中将字符串转换为浮点数()】你可能还需要查看以下指南以了解其他转换:
  • 字符串到整数
  • 整数到浮点数
  • 整数到字符串

    推荐阅读