Сопоставьте столбцы в двух кадрах данных pandas с разными типами данных.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Сопоставьте столбцы в двух кадрах данных pandas с разными типами данных.

Сообщение Anonymous »

У меня есть два листа Excel, один из которых («редактировать») представляет собой слегка измененную версию другого («базового»). Я хочу выяснить, были ли добавлены, удалены или перемещены какие-либо столбцы. Я загрузил рабочие листы в фреймы данных и попытался сопоставить два фрейма, но получил бесполезную ошибку, которая, как я предполагаю, связана с небрежной проверкой типов значений ячеек.

Код: Выделить всё

base = pd.read_excel(base_path, engine="openpyxl", sheet_name=name, header=None)
edit = pd.read_excel(edit_path, engine="openpyxl", sheet_name=name, header=None)

print(edit.to_string())
#=>        0     1     2     3     4     5     6     7
#=> 0    NaN  snip  blip  twig  zorp  plum  glim  frap
#=> 1    qux    10    10     9    11     9    10    10
#=> 2    baz    20    18    19    20    20    20    18
#=> 3    bat    12    11    12    11    11    12    12
#=> 4    zot    15    15    16    14    16    14    14
#=> 5    wib    11    11     9     9    10    10    11
#=> 6    fiz    16    16    18    17    18    18    16
#=> 7    woz    19    18    17    19    17    18    17
#=> 8    lug    13    12    12    12    11    12    13
#=> 9    vim    13    14    12    14    12    13    13
#=> 10   nub    18    17    18    16    16    17    18
#=> 11  sums   147   142   142   143   140   144   142

print(edit.to_string())
#=>       0     1     2     3     4      5      6     7     8   9   10   11
#=> 0    0.7  snip  blip  twig  zorp   plum  glim2  glim  frap NaN NaN  NaN
#=> 1    qux    10    10     9    11      9     10    10    10 NaN NaN  NaN
#=> 2    baz    20    18    19    20     20     21    20    18 NaN NaN  1.2
#=> 3    bat    12    11    12    11     11     12    12    12 NaN NaN  NaN
#=> 4    zot    15    15    16    14     16     17    14    14 NaN NaN  NaN
#=> 5    wib    11    11     9     9   61.6     10    10    11 NaN NaN  NaN
#=> 6    fiz    16    16    18    17     18     18    19    16 NaN NaN  NaN
#=> 7    woz    19    18    17    19     17     18    18    17 NaN NaN  NaN
#=> 8    lug    13    12    12    12     11     12    12    13 NaN NaN  NaN
#=> 9    vim    13    14    12    14     12     13    13    13 NaN NaN  NaN
#=> 10   nub    18    17    18    16     16     17    17    18 NaN NaN  NaN
#=>  11  sums   147   131   142   150  191.6    148   145   142 NaN NaN  NaN

corr = base.corrwith(edit, axis=0)
Выдает следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "/Users/phrogz/xlsxdiff/tmp.py", line 18, in 
corr = base.corrwith(edit, axis=0)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/frame.py", line 11311, in corrwith
ldem = left - left.mean(numeric_only=numeric_only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/frame.py", line 11693, in mean
result = super().mean(axis, skipna, numeric_only, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/generic.py", line 12420, in mean
return self._stat_function(
^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/generic.py", line 12377, in _stat_function
return self._reduce(
^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/frame.py", line 11562, in _reduce
res = df._mgr.reduce(blk_func)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/internals/managers.py", line 1500, in reduce
nbs = blk.reduce(func)
^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/internals/blocks.py", line 404, in reduce
result = func(self.values)
^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/frame.py", line 11481, in blk_func
return op(values, axis=axis, skipna=skipna, **kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/nanops.py", line 147, in f
result = alt(values, axis=axis, skipna=skipna, **kwds)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/nanops.py", line 404, in new_func
result = func(values, axis=axis, skipna=skipna, mask=mask, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/pandas/core/nanops.py", line 719, in nanmean
the_sum = values.sum(axis, dtype=dtype_sum)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/phrogz/.venv/lib/python3.11/site-packages/numpy/_core/_methods.py", line 53, in _sum
return umr_sum(a, axis, dtype, out, keepdims, initial, where)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Есть ли способ использовать вычисление корреляции данных, или мне придется провести собственный расчет?
Кстати, этот тест данные упрощены. Не всегда существует одна строка заголовка с уникальными строками, может быть много строк, представляющих заголовок. Я не могу использовать одну строку для определения уникального идентификатора. Более того, затем я хочу сделать то же самое для строк, где (опять же), возможно, много столбцов, используемых в качестве заголовков строк. И, как показано, значения ячеек могли немного измениться.

Подробнее здесь: https://stackoverflow.com/questions/791 ... data-types
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»