如何仅对DataFrame指定列的非NaN值执行除以1000的运算
解决方法
你执行失败并非因为NaN,pandas的数值运算默认会自动忽略NaN值,真正的原因是Col1列存储的是带千分位逗号的字符串格式,无法直接参与数值运算,按以下步骤处理即可:
- 先把
Col1列的字符串转换为数值类型,自动保留NaN值 - 对转换后的数值做除以1000的运算
- 按需将结果格式化为你预期的带千分位逗号的展示格式
完整实现代码如下:
import pandas as pd import numpy as np # 步骤1:去掉Col1字符串中的千分位逗号,转换为数值类型,无法转换的内容自动设为NaN df['Col1_numeric'] = pd.to_numeric(df['Col1'].str.replace(',', '', regex=False), errors='coerce') # 步骤2:除以1000得到Col2的数值结果,NaN自动保留 df['Col2'] = df['Col1_numeric'] / 1000 # 步骤3(可选):如果需要Col2为和示例一致的带千分位逗号的字符串格式,执行以下代码 def format_col2_val(x): if pd.isna(x): return np.nan if x.is_integer(): return f"{int(x):,}" return str(x) df['Col2'] = df['Col2'].apply(format_col2_val) # 删除中间转换列(不需要可省略) df.drop('Col1_numeric', axis=1, inplace=True)
如果你不需要Col2带千分位逗号,只需要数值类型的结果,可以跳过第三步的格式化操作,直接用除以1000后的数值即可。
内容的提问来源于stack exchange,提问作者user14073111
相关产品推荐
相关产品推荐

