【Python基础-Pandas】解决Pandas会自动把None转成NaN的问题
1. 背景
目前dataframe中的数据如下,power字段表示功率值,第一个值为20.0,第二个值为None。需要计算电量值,电量 = 功率 * 0.25,并保存到energy字段中,如果功率值为None,则电量值也为None。
power
0 20.0
1 None
df = pd.DataFrame(data={
'power': [20, None]
})
df['energy'] = df.apply(
lambda col: Decimal(col['power']) * Decimal(0.25)
if col['power'] is not None else None,
axis=1)
print(df)
结果如下:
power energy
0 20.0 5.00
1 NaN NaN
发现原本的None值被自动转成了NaN
2. 解决
Pandas会自动将Python中的None值转换为NaN("Not a Number"的缩写)值。NaN是Pandas中表示缺失数据的一种特殊值。这种自动转换是因为None通常用于表示缺失或空数据,而NaN是Pandas用于处理缺失数据的标准方式。
如果不希望Pandas自动将None转换为NaN,您可以在创建Series或DataFrame对象时明确指定dtype(数据类型),将其设置为适当的数据类型,以便None可以保持原样。
如下:
df = pd.DataFrame(data={
'power': [20, None]
}, dtype=object)
df['energy'] = df.apply(
lambda col: Decimal(col['power']) * Decimal(0.25)
if col['power'] is not None else None,
axis=1)
print(df)
结果如下:
power energy
0 20 5.00
1 None None