Элегантный способ создания пустого 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()
. Есть ли более элегантный способ создать тот же результат?
Ответы
Ответ 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)