今天遇到的问题是,要将一份csv数据读入dataframe,但某些列中含有NA值。对于这些列来说,NA应该作为一个有意义的level,而不是缺失值,但read_csv函数会自动将类似的缺失值理解为缺失值并变为NaN。
na_values
: scalar, str, list-like, or dict, default None
Additional strings to recognize as NA/NaN. If dict passed, specific per-column NA values. By default the following values are interpreted as NaN: '-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A','#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan', ''
.
keep_default_na
: boolean, default True
If na_values are specified and keep_default_na is False
the default NaN values are overridden, otherwise they’re appended to.
看pandas文档中read_csv函数中这两个参数的描述,默认会将'-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A','#N/A', 'N/A', 'NA', '#NA', 'NULL', 'NaN', '-NaN', 'nan', '-nan', ''
转换为NaN,且na_values
参数还支持定义另外的应处理为缺失值的值。
值得注意的是keep_default_na
参数,这个参数的作用是决定要不要保留默认应该转换的缺失值列表,将这个参数设为False
之后同时不定义na_values
参数,就可以在读取文件时不将任何值转换为缺失值NaN。
例:
import pandas as pd
df = pd.read_csv('train.csv', keep_default_na=False)