【问题标题】:Elegant way to create empty pandas DataFrame with NaN of type float用浮点类型的 NaN 创建空 pandas DataFrame 的优雅方法
【发布时间】:2015-07-15 04:59:46
【问题描述】:

我想创建一个用 NaN 填充的 Pandas DataFrame。在我的研究中,我发现了an answer

import pandas as pd

df = pd.DataFrame(index=range(0,4),columns=['A'])

此代码生成一个填充了“object”类型的 NaN 的 DataFrame。因此它们不能在以后使用,例如 interpolate() 方法。因此,我用这个复杂的代码(灵感来自this answer)创建了DataFrame:

import pandas as pd
import numpy as np

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

df = pd.DataFrame(dummyarray)

这会产生一个填充了“float”类型的 NaN 的 DataFrame,因此它可以在以后与interpolate() 一起使用。有没有更优雅的方法来创建相同的结果?

【问题讨论】:

  • 我必须输入 dummyarray = np.empty((4,1)) 才能工作

标签: python pandas numpy dataframe nan


【解决方案1】:

只需将所需的值作为第一个参数传递,例如0math.inf 或这里的np.nan。然后构造函数初始化值数组并将其填充为参数indexcolumns 指定的大小:

>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame(np.nan, index=[0, 1, 2, 3], columns=['A', 'B'])

>>> df
    A   B
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN

>>> df.dtypes
A    float64
B    float64
dtype: object

【讨论】:

  • 也适用于 pd.Series。太棒了!
【解决方案2】:

你可以在构建DataFrame时直接指定dtype:

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

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

【讨论】:

    【解决方案3】:

    希望这能有所帮助!

     pd.DataFrame(np.nan, index = np.arange(<num_rows>), columns = ['A'])
    

    【讨论】:

      【解决方案4】:

      对于多列,您可以这样做:

      df = pd.DataFrame(np.zeros([nrow, ncol])*np.nan)
      

      【讨论】:

        【解决方案5】:

        你可以试试这行代码:

        pdDataFrame = pd.DataFrame([np.nan] * 7)
        

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

        如果您打印pdDataFrame,输出将是:

             0
        0   NaN
        1   NaN
        2   NaN
        3   NaN
        4   NaN
        5   NaN
        6   NaN
        

        pdDataFrame.dtypes 的输出也是:

        0    float64
        dtype: object
        

        【讨论】:

          猜你喜欢
          • 2016-03-26
          • 1970-01-01
          • 2017-05-25
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多