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

2021年9月19日23:46:58 发表评论 8,437 次浏览

需要在 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 pd

data = {'Product': ['ABC','XYZ'],
          'Price': ['250','270']
        }

df = pd.DataFrame(data)
print (df)
print (df.dtypes)

在 Python 中运行代码,你将看到'Price' 列的数据类型是Object

  Product Price
0     ABC   250
1     XYZ   270
Product    object
Price      object
dtype: object

目标是将“价格”列下的值转换为浮点数。

然后,你可以使用 astype(float)方法执行到浮点数的转换:

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

在我们示例的上下文中,“DataFrame Column”是“Price”列。因此,DataFrame字符串转换为浮点数示例

import pandas as pd

data = {'Product': ['ABC','XYZ'],
          'Price': ['250','270']
        }

df = pd.DataFrame(data)
df['Price'] = df['Price'].astype(float)

print (df)
print (df.dtypes)

你现在将看到“价格”列已转换为浮点数:

  Product  Price
0     ABC  250.0
1     XYZ  270.0
Product     object
Price      float64
dtype: object

场景 2:数字和非数字值

让我们创建一个具有两列(“产品”和“价格”列)的新 DataFrame。只是这一次,“价格”列下的值将包含数字和非数字数据的组合:

ProductPrice
AAA250
BBBABC260
CCC270
DDD280XYZ

这是 DataFrame 在 Python 中的样子:

import pandas as pd

data = {'Product': ['AAA','BBB','CCC','DDD'],
          'Price': ['250','ABC260','270','280XYZ']
        }

df = pd.DataFrame(data)

print (df)
print(df.dtypes)

和以前一样,“价格”列的数据类型是对象:

  Product   Price
0     AAA     250
1     BBB  ABC260
2     CCC     270
3     DDD  280XYZ
Product    object
Price      object
dtype: object

然后,你可以使用 to_numeric方法将“价格”列下的值转换为浮点数:

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

通过设置 errors='coerce',你会将非数字值转换为NaN。

这是你可以使用的完整代码:

import pandas as pd

data = {'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)

运行代码,你将看到“价格”列现在是一个浮点数:

  Product  Price
0     AAA  250.0
1     BBB    NaN
2     CCC  270.0
3     DDD    NaN
Product     object
Price      float64
dtype: object

为了更进一步,你甚至可以使用df.replace将“NaN”值替换为“0”值:

import pandas as pd
import numpy as np

data = {'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)

这是你会得到的:

  Product  Price
0     AAA  250.0
1     BBB    0.0
2     CCC  270.0
3     DDD    0.0
Product     object
Price      float64
dtype: object

场景三:在整个DataFrame下将Strings转化为Floats

Pandas DataFrame将字符串转换为浮点数:对于最后一个场景,让我们创建一个包含 3 列的 DataFrame,其中所有值都将存储为字符串(使用单引号):

import pandas as pd

data = {'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
0     300     250     530
1     750     270     480
2     600     950     420
3     770     580     290
4     920     410     830
Price_1    object
Price_2    object
Price_3    object
dtype: object

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

df = df.astype(float)

因此,执行转换的完整 Python 代码,DataFrame字符串转换为浮点数示例如下:

import pandas as pd

data = {'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_1  Price_2  Price_3
0    300.0    250.0    530.0
1    750.0    270.0    480.0
2    600.0    950.0    420.0
3    770.0    580.0    290.0
4    920.0    410.0    830.0
Price_1    float64
Price_2    float64
Price_3    float64
dtype: object

你可能还需要查看以下指南以了解其他转换:

  • 字符串到整数
  • 整数到浮点数
  • 整数到字符串
木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: