需要在 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字符串转换为浮点数的方法:
- 对于包含存储为字符串的数值的列
- 对于同时包含数字和非数字值的列
- 对于整个数据帧
在 Pandas DataFrame 中将字符串转换为浮点数的场景
场景 1:数值存储为字符串
为了简单起见,让我们创建一个只有两列的 DataFrame:
Product | Price |
ABC | 250 |
XYZ | 270 |
下面是在 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。只是这一次,“价格”列下的值将包含数字和非数字数据的组合:
Product | Price |
AAA | 250 |
BBB | ABC260 |
CCC | 270 |
DDD | 280XYZ |
这是 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
你可能还需要查看以下指南以了解其他转换:
- 字符串到整数
- 整数到浮点数
- 整数到字符串