Конкретные кадры данных Pandas с разными столбцами: AttributeError: у объекта 'NoneType' нет атрибута 'is_extension' - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь объединить два кадра данных с разными именами столбцов вдоль оси 0.Я нашел похожий вопрос здесь Как использовать join_axes в конкатенации осей столбцов с использованием pandas DataFrame? однако это решение не работает для меня, так как имена столбцов двух моих кадров данных не совпадают.Поскольку мои исходные данные слишком велики для размещения здесь, следующий пример должен иллюстрировать то, что я пытаюсь сделать:

df1 = pd.DataFrame(np.random.randint(0,100,size=(1, 4)), columns=list('ABCD'))
df2 = pd.DataFrame(np.random.randint(0,100,size=(1, 4)), columns=list('EFGH'))

#df1
    A   B   C   D
0   26  39  7   44

#df2
    E   F   G   H
0   12  44  26  64

pd.concat([df1,df2],axis=0).reset_index(drop=True)
# desired output looks like this
A   B   C   D   E   F   G   H
0   26.0    39.0    7.0 44.0    NaN NaN NaN NaN
1   NaN NaN NaN NaN 12.0    44.0    26.0    64.0

Приведенный выше код работает отлично.Однако, как только я ввожу свои собственные кадры данных для df1 и df2, используя тот же синтаксис, что и выше, я получаю ошибку.

# my real dfs are called data1 & data2, I tried setting ignore_index=True and ignore_index=False
pd.concat([data1, data2],axis=0, ignore_index=True)

приводит к следующей ошибке:

Ошибка:

 ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-194-dbee1fd0bdea> in <module>
    ----> 1 pd.concat([data1, data2],axis=0, ignore_index=True)

    ~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\pandas\core\reshape\concat.py in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, sort, copy)
        224                        verify_integrity=verify_integrity,
        225                        copy=copy, sort=sort)
    --> 226     return op.get_result()
        227 
        228 

    ~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\pandas\core\reshape\concat.py in get_result(self)
        421             new_data = concatenate_block_managers(
        422                 mgrs_indexers, self.new_axes, concat_axis=self.axis,
    --> 423                 copy=self.copy)
        424             if not self.copy:
        425                 new_data._consolidate_inplace()

    ~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\pandas\core\internals.py in concatenate_block_managers(mgrs_indexers, axes, concat_axis, copy)
       5414                 values = values.view()
       5415             b = b.make_block_same_class(values, placement=placement)
    -> 5416         elif is_uniform_join_units(join_units):
       5417             b = join_units[0].block.concat_same_type(
       5418                 [ju.block for ju in join_units], placement=placement)

    ~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\pandas\core\internals.py in is_uniform_join_units(join_units)
       5438         # no blocks that would get missing values (can lead to type upcasts)
       5439         # unless we're an extension dtype.
    -> 5440         all(not ju.is_na or ju.block.is_extension for ju in join_units) and
       5441         # no blocks with indexers (as then the dimensions do not fit)
       5442         all(not ju.indexers for ju in join_units) and

    ~\AppData\Local\Continuum\anaconda3\envs\tensorflow-gpu\lib\site-packages\pandas\core\internals.py in <genexpr>(.0)
       5438         # no blocks that would get missing values (can lead to type upcasts)
       5439         # unless we're an extension dtype.
    -> 5440         all(not ju.is_na or ju.block.is_extension for ju in join_units) and
       5441         # no blocks with indexers (as then the dimensions do not fit)
       5442         all(not ju.indexers for ju in join_units) and

    AttributeError: 'NoneType' object has no attribute 'is_extension'

Я не совсем понимаю, что пытается сказать мне это сообщение об ошибке.Я пытался использовать fillna на обоих фреймах данных так, чтобы больше не было 'NoneType':

data2 = data2.fillna(999)
data1 = data1.fillna(999)

Однако я все равно получаю одно и то же сообщение об ошибке.

Два кадра данных, которые я использую, довольно велики, поэтому я не могу, к сожалению, опубликовать весь пример здесь.Содержимое моих двух информационных фреймов - просто целые числа, числа с плавающей запятой и строки, поэтому здесь нет ничего необычного, что могло бы привести к возможной причине ошибки.Любая идея о том, что может вызвать эту ошибку или что я мог бы проверить, чтобы сузить проблему?

Большое спасибо!

1 Ответ

0 голосов
/ 14 февраля 2019

Оказывается проблема, когда только дубликаты имен столбцов в одном из моих фреймов данных ... Избавление от этих дубликатов решило проблему.Выше код теперь работает без нареканий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...