Pandas含NaN数值列类型识别问题:如何自动检测列数据类型?
Pandas自动检测DataFrame列数据类型的解决方案
方法1:预处理数据,替换字符串缺失值为np.nan
R中的NA是内置缺失值标记,而你代码里的"NA"是字符串,Pandas不会自动识别。先将其替换为Pandas认可的np.nan,就能让列被正确识别为数值型:
import pandas as pd import numpy as np data = { "calories": [np.nan, 380, 390], "duration": [50, 40, 45] } df = pd.DataFrame(data) print(df.dtypes) # 输出结果: # calories float64 # duration int64 # dtype: object
方法2:对已生成的DataFrame做列类型转换
如果已经创建了包含字符串"NA"的DataFrame,用pd.to_numeric()强制转换列类型,同时将无效值转为缺失值:
import pandas as pd data = { "calories": ["NA", 380, 390], "duration": [50, 40, 45] } df = pd.DataFrame(data) # 转换calories列,errors='coerce'将无法转为数值的内容转为NaN df['calories'] = pd.to_numeric(df['calories'], errors='coerce') print(df.dtypes) # 输出结果: # calories float64 # duration int64 # dtype: object
方法3:用convert_dtypes()获取更精准的类型
Pandas 1.0及以上版本提供的convert_dtypes(),可以自动推断并转换为更合适的类型,比如支持缺失值的整数类型Int64(区别于默认的float64):
import pandas as pd import numpy as np data = { "calories": [np.nan, 380, 390], "duration": [50, 40, 45] } df = pd.DataFrame(data).convert_dtypes() print(df.dtypes) # 输出结果: # calories Int64 # duration int64 # dtype: object
核心要点
Pandas默认不会把字符串"NA"当成缺失值,这是和R的核心差异。只要先将这类字符串形式的缺失值转为np.nan,Pandas就能自动识别出列的正确数值类型。
内容的提问来源于stack exchange,提问作者Sosa
相关产品推荐
相关产品推荐

