Невозможно заполнить значения NaN в нескольких столбцах лямбда-выражением в пандах - PullRequest
2 голосов
/ 26 марта 2019

Я пытаюсь заполнить все значения NaN столбцов с плавающей запятой 0 в моем DataFrame all_files_d, затем поместить его в пустой список или в DataFrame с именем ts.

Образец моих данных таков:

 ColX              ColY
 56.9              6.4
 67.5              NaN
 NaN               8.9
 NaN               NaN

Я пытался следовать этому коду вопросов, поскольку он, кажется, работал для некоторых пользователей, но, похоже, есть значения NaN, и он ничего не заполнил:

Fillna в нескольких столбцах на месте в Python Pandas

Это мой код:

ts = []
all_files_d.apply(lambda x: x.fillna(0, inplace = True) if x.dtype.kind
 in 'f' else x.fillna('.', inplace = True), axis = 1)

ts.append(all_files_d)

Я бы надеялся получить следующие результаты со всеми NaN, заполненными 0. Заранее спасибо.

 ColX              ColY
 56.9              6.4
 67.5              0
 0                 8.9
 0                 0

Буду признателен за любую помощь.

Ответы [ 3 ]

1 голос
/ 26 марта 2019

Использование combine_first с pd.to_numeric():

протестировано с (добавлен дополнительный столбец строки):

df['Colz']=['abc',np.nan,'def',np.nan]
print(df)

   ColX ColY Colz
0  56.9  6.4  abc
1  67.5  NaN  NaN
2   NaN  8,9  def
3   NaN  NaN  NaN

df.combine_first(df.apply(lambda x: \
      pd.to_numeric(x,errors='coerce')).dropna(how='all',axis=1).fillna(0))

выход

   ColX ColY Colz
0  56.9  6.4  abc
1  67.5    0  NaN
2   0.0  8,9  def
3   0.0    0  NaN

РЕДАКТИРОВАТЬ, для выборки типов поплавка и заполнения NaN:

m=df.select_dtypes('float').columns 
df.loc[:,m]=df.loc[:,m].fillna(0) 
print(df)
0 голосов
/ 26 марта 2019

IIUC,

ts = df.apply(lambda x: x.fillna(0) if x.dtypes == float else x.fillna('.'))


    ColX    ColY
0   56.9    6.4
1   67.5    0.0
2   0.0     8.9
3   0.0     0.0
0 голосов
/ 26 марта 2019

Использование df.select_dtype()

# fillna to float64 columns
ts = df.select_dtypes(include=['float64']).fillna(0) 

# merge data
df.join(ts, lsuffix="_").reindex(df.columns, axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...