如何在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
相关产品推荐
相关产品推荐

