簡體   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