使用float类型的NaN创建空pandas DataFrame的优雅方法

mjd*_*mjd 44 python numpy nan dataframe pandas

我想创建一个充满NaN的Pandas DataFrame.在我的研究期间,我找到了答案:

import pandas as pd

df = pd.DataFrame(index=range(0,4),columns=['A'])
Run Code Online (Sandbox Code Playgroud)

此代码导致DataFrame填充了"object"类型的NaN.因此,以后不能使用它们,例如使用该interpolate()方法.因此,我使用这个复杂的代码创建了DataFrame(灵感来自这个答案):

import pandas as pd
import numpy as np

dummyarray = np.empty((4,1))
dummyarray[:] = np.nan

df = pd.DataFrame(dummyarray)
Run Code Online (Sandbox Code Playgroud)

这导致DataFrame填充了"float"类型的NaN,因此可以在以后使用它interpolate().是否有更优雅的方式来创建相同的结果?

ojd*_*jdo 64

只需将所需的代表作为标量第一个参数传递,例如0,math.inf或者,在这种情况下np.nan.然后构造函数将value数组初始化为由index和指定的大小columns:

 >>> df = pd.DataFrame(np.nan, index=[0,1,2,3], columns=['A'])
 >>> df.dtypes
 A    float64
 dtype: object
Run Code Online (Sandbox Code Playgroud)

  • 也适用于 pd.Series。优秀! (3认同)

Ale*_*ley 11

您可以在构造DataFrame时直接指定dtype:

>>> df = pd.DataFrame(index=range(0,4),columns=['A'], dtype='float')
>>> df.dtypes
A    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

指定dtype会强制Pandas尝试使用该类型创建DataFrame,而不是尝试推断它.


小智 6

希望这可以帮助!

 pd.DataFrame(np.nan, index = np.arange(<num_rows>), columns = ['A'])
Run Code Online (Sandbox Code Playgroud)


Yog*_*esh 6

你可以尝试这行代码:

pdDataFrame = pd.DataFrame([np.nan] * 7)
Run Code Online (Sandbox Code Playgroud)

这将创建一个大小为 7 且 NaN 类型为 float 的 pandas 数据框:

如果打印pdDataFrame输出将是:

     0
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
5   NaN
6   NaN
Run Code Online (Sandbox Code Playgroud)

的输出也是pdDataFrame.dtypes

0    float64
dtype: object
Run Code Online (Sandbox Code Playgroud)


小智 5

对于多列,您可以执行以下操作:

df = pd.DataFrame(np.zeros([nrow, ncol])*np.nan)
Run Code Online (Sandbox Code Playgroud)