Подтвердить что ты не робот

Элегантный способ создания пустого pandas DataFrame с NaN типа float

Я хочу создать DataFrame Pandas, заполненный NaN. Во время моих исследований я нашел ответ:

import pandas as pd

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

Этот код приводит к DataFrame, заполненному NaN типа "объект". Поэтому они не могут использоваться позже, например, с помощью метода interpolate(). Поэтому я создал DataFrame с этим сложным кодом (вдохновленным этим ответом):

import pandas as pd
import numpy as np

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

df = pd.DataFrame(dummyarray)

В результате получается DataFrame, заполненный NaN типа "float", поэтому его можно использовать позже с помощью interpolate(). Есть ли более элегантный способ создать тот же результат?

4b9b3361

Ответ 1

Просто передайте желаемый представитель как скалярный первый аргумент, например 0, math.inf или, в данном случае, np.nan. Затем конструктор инициализирует массив значений размером, указанным index и columns:

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

Ответ 2

Вы можете напрямую указать dtype при построении DataFrame:

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

Вы можете попробовать эту строку кода:

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

Это создаст кадр данных pandas размером 7 с NaN типа float:

если вы напечатаете pdDataFrame результат будет:

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

Также вывод для pdDataFrame.dtypes:

0    float64
dtype: object

Ответ 5

Будет ли это хороший подход?

pd.DataFrame(np.nan, index=[], columns=[])

Любая причина, по которой она не является частью библиотеки?

Ответ 6

Для нескольких столбцов вы можете сделать:

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