Замена значения NULL в огромном df вызывает ошибку: python - PullRequest
0 голосов
/ 12 июля 2020

У меня есть 2 набора dfs, которые очень велики по количеству строк около 39 КБ и количеству столбцов около 400 КБ, и с помощью команды ниже я пытаюсь заменить 2 значения NULL фрейма данных. Поскольку этот df является динамическим c, поэтому я не могу указать fillna в столбце specifici c, я хочу заменить полный df NULL на NA.

str_cols = df1.columns[df1.dtypes==object] 
df1[str_cols] = df1[str_cols].fillna('.',inplace=True) 
df1 = df1[pd.isnull(df1).any(1)].fillna('NA')

str_cols_1 = df2.columns[df2.dtypes==object] 
df2[str_cols_1] = df2[str_cols_1].fillna('.',inplace=True) 
df2=df2[pd.isnull(df1).any(1)].fillna('NA')

Я получаю это сообщение об ошибке:

C: \ Users \ AppData \ Local \ Continuum \ anaconda3 \ lib \ site-packages \ pandas \ core \ frame.py: 4244: SettingWithCopyWarning: значение пытается быть установлено на копии фрагмент из DataFrame

См. предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning -a-view-versus-a-copy ** kwargs Traceback (последний вызов последний) :

Строка файла 1 в файле запуска ('C: / Users /// Desktop / Pythonscript / s2.py.py', wdir = 'C: / Users // Desktop / Pythonscript' )

"C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile execfile(filename, namespace)

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/<user>/<path>/Desktop/Pythonscript/s2.py.py", line 29, in df1=df1[pd.isnull(df1).any(1)].fillna('NA')

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\frame.py", line 4244, in fillna **kwargs

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py", line 6279, in fillna value=value, limit=limit, inplace=inplace, downcast=downcast

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 575, in fillna return self.apply("fillna", **kwargs)

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\managers.py", line 438, in apply applied = getattr(b, f)(**kwargs)

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 441, in fillna return self.split_and_operate(mask, f, inplace)

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 493, in split_and_operate nv = f(m, v, i)

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 434, in f block = self.coerce_to_target_dtype(value)

File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 1079, in coerce_to_target_dtype return self.astype(object)

 File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 559, in astype
    return self._astype(dtype, copy=copy, errors=errors, values=values, **kwargs)

  File "C:\Users\<user>\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\internals\blocks.py", line 639, in _astype
    values = self.get_values(dtype=dtype)

1 Ответ

0 голосов
/ 12 июля 2020

Если вы используете sh для замены всех значений фрейма данных, имеющих NULL, на NA, вы можете использовать следующее:

df.fillna('NA', inplace=True)

Если вы wi sh чтобы заменить значения столбца объекта типа, имеющего NULL, на NA, вы можете использовать следующее.

cols = df.columns[df.dtypes==object]

for i in cols:
   df[i] = df[i].fillna('NA', inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...