如何将NULL视为带有pandas的普通字符串?

pir*_*iri 28 python csv string dataframe pandas

我有一个带有字符串的列的csv文件,我想用pandas读取它.在此文件中,字符串null作为实际值出现,不应视为缺失值.

例:

import pandas as pd
from io import StringIO

data = u'strings,numbers\nfoo,1\nbar,2\nnull,3'
print(pd.read_csv(StringIO(data)))
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

  strings  numbers
0     foo        1
1     bar        2
2     NaN        3
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能将数值null(而不是NaN)纳入DataFrame?可以假定该文件不包含任何实际缺失的值.

cs9*_*s95 29

您可以convertersstring列指定参数.

pd.read_csv(StringIO(data), converters={'strings' : str})

  strings  numbers
0     foo        1
1     bar        2
2    null        3
Run Code Online (Sandbox Code Playgroud)

这将绕过熊猫的自动解析.


另一种选择是na_filter=False:

pd.read_csv(StringIO(data), na_filter=False)

  strings  numbers
0     foo        1
1     bar        2
2    null        3
Run Code Online (Sandbox Code Playgroud)

这适用于整个DataFrame,因此请谨慎使用.如果您想通过手术将其应用于选择列,我建议使用第一个选项.


EdC*_*ica 15

发生这种情况的原因是字符串'null'被视为NaN解析时,你可以通过传递keep_default_na=False@ coldspeed的答案来关闭它:

In[49]:
data = u'strings,numbers\nfoo,1\nbar,2\nnull,3'
df = pd.read_csv(io.StringIO(data), keep_default_na=False)
df

Out[49]: 
  strings  numbers
0     foo        1
1     bar        2
2    null        3
Run Code Online (Sandbox Code Playgroud)

完整列表是:

na_values:标量,str,list-like或dict,默认无

要识别为NA/NaN的其他字符串.如果dict通过,则具体的每列NA值.默认情况下,以下值被解释为NaN:'','#N/A','#N/AN/A','#N',' - 1.#IND',' - .#QNAN', '-NaN',' - nan','1.#IND','1.#QNAN','N/A','NA','NULL','NaN','n/a','nan ', '空值'.


Max*_*axU 5

我们可以动态地排除'NULL''null'从组默认的_NA_VALUES:

In [4]: na_vals = pd.io.common._NA_VALUES.difference({'NULL','null'})

In [5]: na_vals
Out[5]:
{'',
 '#N/A',
 '#N/A N/A',
 '#NA',
 '-1.#IND',
 '-1.#QNAN',
 '-NaN',
 '-nan',
 '1.#IND',
 '1.#QNAN',
 'N/A',
 'NA',
 'NaN',
 'n/a',
 'nan'}
Run Code Online (Sandbox Code Playgroud)

并用于read_csv():

df = pd.read_csv(io.StringIO(data), na_values=na_vals)
Run Code Online (Sandbox Code Playgroud)