Из того, что кажется math.log10
не может обрабатывать ни pandas-фреймы данных, ни ndarrays.
Таким образом, одним из вариантов будет использование numpy, который также включает функцию для вычисления логарифма с основанием 10, np.log10
, и восстановления кадра данных, как указано в других решениях.
Или, если вы хотите использовать math.log10
, и то же самое будет применяться к другим функциям, которые не могут быть непосредственно векторизованы, вы можете использовать DataFrame.applymap
, чтобы применить math.log10
к элементарному элементу данных. Однако обратите внимание, что это решение будет медленнее, чем векторизованный подход с использованием np.log10
.
Вариант использования
Вот пример того, как это можно сделать с помощью DataFrame.applymap
:
df = pd.DataFrame(np.random.randint(1,5,(6,6)), columns=list('abcdef'))
print(df)
a b c d e f
0 3 4 1 1 2 1
1 4 4 4 3 4 1
2 4 3 3 1 4 1
3 3 4 1 3 1 1
4 1 2 3 4 2 1
5 1 3 3 1 4 3
df.applymap(math.log10)
a b c d e f
0 0.477121 0.602060 0.000000 0.000000 0.30103 0.000000
1 0.602060 0.602060 0.602060 0.477121 0.60206 0.000000
2 0.602060 0.477121 0.477121 0.000000 0.60206 0.000000
3 0.477121 0.602060 0.000000 0.477121 0.00000 0.000000
4 0.000000 0.301030 0.477121 0.602060 0.30103 0.000000
5 0.000000 0.477121 0.477121 0.000000 0.60206 0.477121
Для решения numpy
вы можете взять np.log10
кадра данных и восстановить его как:
pd.DataFrame(np.log10(data), index=df.index, columns=df.columns)