繁体   English   中英

Pandas 为“NA”字符串填充异常

[英]Pandas fillna exception for 'NA' string

样本文件.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)

当前 output

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

需要 output

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,因为它在 output 中,同时它应该用特定文本“NOT AVLBL”替换 null 值也尝试过替换方法,但无法获得所需的 Z78E6221F63989F14CE666

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 文档

Pandas read_csv在这里有点太聪明了。 问题是许多字符串通常用于识别 CSV 文件中的缺失值。

根据官方文档

... 默认情况下,以下值被解释为 NaN:''、'#N/A'、'#N/AN/A'、'#NA'、'-1.#IND'、'-1.# QNAN'、'-NaN'、'-nan'、'1.#IND'、'1.#QNAN'、''、'N/A'、'NA'、'NULL'、'NaN'、'n /a'、'nan'、'null'。

所以你的 dataframe确实包含一个 NaN 并且fillna通常会填充它。

要只接受空字符串作为 NaN,您必须将na_values设置为''并将keep_default_na为 false:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM