Pandas 'NA' 字符串的 fillna 异常

Pandas fillna exception for 'NA' string

sample_file.txt

6|test|3|4
5|test||8
9|test|NA|12

脚本

import pandas as pd
df = pd.read_csv('sample_file.txt', dtype='str', sep='|', names=['upc_cd', 'chr_typ', 'chr_vl','chr_vl_typ'])
df["chr_vl"].fillna("NOT AVLBL", inplace = True)
print(df)

当前输出

upc_cd chr_typ     chr_vl chr_vl_typ
0      6    test          3          4
1      5    test  NOT AVLBL          8
2      9    test  NOT AVLBL         12

需要输出

upc_cd chr_typ     chr_vl chr_vl_typ
0      6    test          3          4
1      5    test  NOT AVLBL          8
2      9    test         NA         12

基本上我需要 NA 因为它在输出中同时它应该用特定文本替换空值 'NOT AVLBL' 也尝试了替换方法,但无法获得所需的输出

Pandas read_csv 函数已经定义了一组字符串,当您加载 csv 文件时,这些字符串将被解释为 NaN。在这里,您可以选择用其他字符串扩展该列表,也可以完全覆盖它。在您的情况下,您必须覆盖它,因为 NA 是 pandas 使用的默认值之一。为此, 你可以试试

df = pd.read_csv('sample_file.txt', dtype='str', sep='|',
                 names=['upc_cd', 'chr_typ', 'chr_vl','chr_vl_typ'],
                 na_values=[''], keep_default_na=False)
...

这只会将空字符串解释为 NA,因为我们已将 keep_default_na 设置为 False,并且仅将 '' 作为带有 na_values 参数的 NA 值。 如果您想了解更多信息,请查看 pandas docs.