Вы передаете его через разреженную матрицу и возвращаете DataFrame в качестве диктанта. К сожалению, pandas имеет ограниченные возможности разреженной матрицы, поэтому нам нужно использовать scipy. Следующий код должен работать для вашего приложения.
import scipy as sp
import pandas as pd
import numpy as np #for the random dataframe as example.
# Example dataframe
df = pd.DataFrame(np.random.randint(0,10,size=(1000, 10)))
# Use scipy to create sparse matrix
coo = sp.sparse.csc_matrix(df).tocoo(copy=False)
# Parse sparse matrix back into dataframe without zeroes.
df = pd.DataFrame({'index': coo.row, 'col': coo.col, 'data': coo.data})[
['index', 'col', 'data']].sort_values(['index', 'col']).reset_index(drop=True)
# Create index to split (row, column) from value.
ix = pd.MultiIndex.from_frame(df[['index','col']])
df = df['data'].copy(True)
df.index = ix
# Output as dict
df.to_dict()
df
0 1 2 3 4 5 6 7 8 9
0 4 7 0 3 4 8 6 0 5 3
1 3 3 9 2 1 2 8 2 7 2
2 0 1 5 5 4 3 2 0 4 1
3 6 7 7 7 2 1 3 7 1 1
4 2 5 9 8 9 7 5 4 0 3
{(0, 0): 4,
(0, 1): 7,
(0, 3): 3, # Notice (0,2) is gone.
(0, 4): 4,
(0, 5): 8,
(0, 6): 6,
(0, 8): 5,
(0, 9): 3,
(1, 0): 3,
(1, 1): 3,
(1, 2): 9,
(1, 3): 2,
(1, 4): 1,
(1, 5): 2,
(1, 6): 8,
(1, 7): 2,
(1, 8): 7,
(1, 9): 2,
(2, 1): 1, # Notice (2,0) is gone.
(2, 2): 5,
(2, 3): 5,
(2, 4): 4,
(2, 5): 3,
(2, 6): 2,
(2, 8): 4,
(2, 9): 1,