将基于字符串的NaN转换为numpy NaN

4

我有一个数据框,其中一部分如下所示:

2016-12-27              NaN
2016-12-28              NaN
2016-12-29              NaN
2016-12-30              NaN
2016-12-31              NaN
Name: var_name, dtype: object

该列包含NaN字符串/对象。我该如何将其转换为numpy的nan呢?最好能够在读取csv文件时进行转换。

你能否在该列上直接调用 np.float64() 函数? - chrisaycock
或者使用numpy.nan将其设置为NaN? - shapeshifter
4个回答

3
df[var_name_replace] = df[var_name].replace('NaN', np.nan)

2
当回答一个旧问题时,如果您包含一些上下文来解释您的答案如何帮助,特别是对于已经有被接受答案的问题,那么您的答案将对其他StackOverflow用户更有用。请参阅:如何撰写好的答案 - David Buck

1

是的,在读取csv文件时可以这样做。

df = pd.read_csv('test.csv', names=['t', 'v'], dtype={'v':np.float64})

请查看pandas.read_csv的文档。其中有一些参数对您的应用程序很有用:

  • names
  • dtype
  • na_values

希望这对您有所帮助。


1

Suppose we have:

>>> df=pd.DataFrame({'col':['NaN']*10})

您可以使用 .apply 来转换:
>>> new_df=df.apply(float, axis=1)
>>> type(new_df[0])
<type 'numpy.float64'>

1
我会使用read_csv中的converters选项。在这种情况下,我们旨在将问题列转换为数字值,并将其他所有内容视为numpy.nan,包括字符串版本的'NaN'
converter = lambda x: pd.to_numeric(x, 'coerce')
df = pd.read_csv(StringIO(txt), delim_whitespace=True, converters={1: converter}, header=None)
df

enter image description here

df.dtypes

0     object
1    float64
dtype: object

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接