You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Pandas中将CSV中的字符串'na'替换为0.0?

问题描述

CSV文件中存在字符串类型的'na'值(非NaN),需要将其替换为0.0。尝试fillna、numpy相关方法及现有代码均未成功,具体情况如下:

现有代码

import pandas as pd
import numpy as np

df = pd.read_csv('Int_Monthly_Visitor.csv', header=0, index_col=0, na_values=0.0)

print(df.head(5).replace(np.nan, 0.0))

当前输出

Brunei Darussalam   Indonesia   Malaysia   Philippines   Thailand   Viet Nam   Myanmar   Japan   ...  Austria   Scandinavia   CIS & Eastern Europe     USA   Canada   Australia   New Zealand   Africa
                                                                                                             ...
 1978 Jan                  na          na         na            na         na         na        na   18,652  ...       na          1,881                    433   8,362    1,328      28,421         3,612      587
 1978 Feb                  na          na         na            na         na         na        na   20,394  ...       na          2,112                    514   8,251    1,434      13,982         2,521      354
 1978 Mar                  na          na         na            na         na         na        na   20,136  ...       na          2,183                    472   9,901    1,662      16,536         2,727      405
 1978 Apr                  na          na         na            na         na         na        na   13,508  ...       na          1,590                    405  11,782    1,586      16,499         3,197      736
 1978 May                  na          na         na            na         na         na        na   14,472  ...       na          1,245                    431  13,448    2,025      20,690         5,130      514

期望输出

Brunei Darussalam   Indonesia   Malaysia   Philippines   Thailand   Vietnam   Myanmar   Japan   ...  Austria   Scandinavia   CIS & Eastern Europe     USA   Canada   Australia   New Zealand   Africa
                                                                                                             ...
 1978 Jan                 0.0         0.0        0.0           0.0        0.0        0.0       0.0   18,652  ...      0.0          1,881                    433   8,362    1,328      28,421         3,612      587
 1978 Feb                 0.0         0.0        0.0           0.0        0.0        0.0       0.0   20,394  ...      0.0          2,112                    514   8,251    1,434      13,982         2,521      354
 1978 Mar                 0.0         0.0        0.0           0.0        0.0        0.0       0.0   20,136  ...      0.0          2,183                    472   9,901    1,662      16,536         2,727      405
 1978 Apr                 0.0         0.0        0.0           0.0        0.0        0.0       0.0   13,508  ...      0.0          1,590                    405  11,782    1,586      16,499         3,197      736
 1978 May                 0.0         0.0        0.0           0.0        0.0        0.0       0.0   14,472  ...      0.0          1,245                    431  13,448    2,025      20,690         5,130      514

解决方法

原代码的问题在于na_values=0.0是把数值0.0识别为缺失值,而需要处理的是字符串'na'。以下两种方法可解决问题:

方法1:读取时指定'na'为缺失值,再填充0.0

修改read_csv的na_values参数,将字符串'na'纳入缺失值列表,之后用fillna替换为0.0:

import pandas as pd
import numpy as np

# 读取时将字符串'na'识别为缺失值
df = pd.read_csv('Int_Monthly_Visitor.csv', header=0, index_col=0, na_values=['na', 0.0])

# 将缺失值替换为0.0
df_filled = df.fillna(0.0)
print(df_filled.head(5))

方法2:直接替换字符串'na'为0.0

若不想修改读取逻辑,直接对DataFrame中的字符串'na'进行替换:

import pandas as pd
import numpy as np

df = pd.read_csv('Int_Monthly_Visitor.csv', header=0, index_col=0)

# 直接替换所有字符串'na'为0.0
df_replaced = df.replace('na', 0.0)
print(df_replaced.head(5))

说明

  • 方法1适合在数据读取阶段规范缺失值,便于后续统一处理;
  • 方法2更直接,仅针对目标字符串操作,不会影响其他缺失值定义。

内容的提问来源于stack exchange,提问作者sfrben99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 06:06:24