How to use math.log10 function on whole pandas dataframe
Clash Royale CLAN TAG#URR8PPP
I want to take the logarithm of every value in a pandas dataframe. I have tried this but it does not work:
#Reading data from excel and rounding values on 2 decimal places
import math
import pandas as pd
data = pd.read_excel("DataSet.xls").round(2)
log_data= math.log10(data)
It gives me this error:
TypeError: must be real number, not DataFrame
Do you have any idea what to do?
python pandas numpy
add a comment |
I want to take the logarithm of every value in a pandas dataframe. I have tried this but it does not work:
#Reading data from excel and rounding values on 2 decimal places
import math
import pandas as pd
data = pd.read_excel("DataSet.xls").round(2)
log_data= math.log10(data)
It gives me this error:
TypeError: must be real number, not DataFrame
Do you have any idea what to do?
python pandas numpy
add a comment |
I want to take the logarithm of every value in a pandas dataframe. I have tried this but it does not work:
#Reading data from excel and rounding values on 2 decimal places
import math
import pandas as pd
data = pd.read_excel("DataSet.xls").round(2)
log_data= math.log10(data)
It gives me this error:
TypeError: must be real number, not DataFrame
Do you have any idea what to do?
python pandas numpy
I want to take the logarithm of every value in a pandas dataframe. I have tried this but it does not work:
#Reading data from excel and rounding values on 2 decimal places
import math
import pandas as pd
data = pd.read_excel("DataSet.xls").round(2)
log_data= math.log10(data)
It gives me this error:
TypeError: must be real number, not DataFrame
Do you have any idea what to do?
python pandas numpy
python pandas numpy
edited Mar 6 at 19:08
yatu
15.6k41542
15.6k41542
asked Mar 6 at 13:42
AleksandarAleksandar
11818
11818
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
Use the numpy version, not math
import numpy as np
np.log10(df)
Thanks my friend!!! Do you have any idea what to do if some values in pandas dataframe are 0? Then, I cant use log function
– Aleksandar
Mar 6 at 17:13
1
(Note that if numpy has no equivalent of the function you want, you can also usenp.vectorize(function)
to turn any scalar function into a vector function.)
– Christoph Burschka
Mar 6 at 17:23
@Aleksandar At that point, you'll have to decide what you want to happen to the zeros. Numpy can handle whatever you choose without difficulty.
– Draconis
Mar 6 at 21:04
1
@ChristophBurschka: But if you do that, it's going to be way slower than a "natively" vectorized function, as well as producing silently wrong results if you aren't careful about having consistent output dtypes.
– user2357112
Mar 7 at 0:05
add a comment |
From what it seems math.log10
cannot handle neither pandas dataframes nor ndarrays.
So one option would be to go with numpy, which also includes a function to compute the base 10 logarithm, np.log10
, and reconstruct the dataframe as pointed out in other solutions.
Or if you want to go with math.log10
, and the same would apply to other functions that cannot be directly vectorized, you can use DataFrame.applymap
to apply math.log10
to the dataframe elementwise. Do note however that this solution will be slower than a vectorized approach using np.log10
.
Use case
Here's an example of how this could be done using 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
For the numpy
solution, you could take the np.log10
of the dataframe, and reconstruct it as:
pd.DataFrame(np.log10(data), index=df.index, columns=df.columns)
add a comment |
You may want to use the applymap
method to apply math.log10
on the whole dataframe, here is the documentation.
You can test it:
df.applymap(math.log10)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55024529%2fhow-to-use-math-log10-function-on-whole-pandas-dataframe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
Use the numpy version, not math
import numpy as np
np.log10(df)
Thanks my friend!!! Do you have any idea what to do if some values in pandas dataframe are 0? Then, I cant use log function
– Aleksandar
Mar 6 at 17:13
1
(Note that if numpy has no equivalent of the function you want, you can also usenp.vectorize(function)
to turn any scalar function into a vector function.)
– Christoph Burschka
Mar 6 at 17:23
@Aleksandar At that point, you'll have to decide what you want to happen to the zeros. Numpy can handle whatever you choose without difficulty.
– Draconis
Mar 6 at 21:04
1
@ChristophBurschka: But if you do that, it's going to be way slower than a "natively" vectorized function, as well as producing silently wrong results if you aren't careful about having consistent output dtypes.
– user2357112
Mar 7 at 0:05
add a comment |
Use the numpy version, not math
import numpy as np
np.log10(df)
Thanks my friend!!! Do you have any idea what to do if some values in pandas dataframe are 0? Then, I cant use log function
– Aleksandar
Mar 6 at 17:13
1
(Note that if numpy has no equivalent of the function you want, you can also usenp.vectorize(function)
to turn any scalar function into a vector function.)
– Christoph Burschka
Mar 6 at 17:23
@Aleksandar At that point, you'll have to decide what you want to happen to the zeros. Numpy can handle whatever you choose without difficulty.
– Draconis
Mar 6 at 21:04
1
@ChristophBurschka: But if you do that, it's going to be way slower than a "natively" vectorized function, as well as producing silently wrong results if you aren't careful about having consistent output dtypes.
– user2357112
Mar 7 at 0:05
add a comment |
Use the numpy version, not math
import numpy as np
np.log10(df)
Use the numpy version, not math
import numpy as np
np.log10(df)
answered Mar 6 at 13:44
ecortazarecortazar
9018
9018
Thanks my friend!!! Do you have any idea what to do if some values in pandas dataframe are 0? Then, I cant use log function
– Aleksandar
Mar 6 at 17:13
1
(Note that if numpy has no equivalent of the function you want, you can also usenp.vectorize(function)
to turn any scalar function into a vector function.)
– Christoph Burschka
Mar 6 at 17:23
@Aleksandar At that point, you'll have to decide what you want to happen to the zeros. Numpy can handle whatever you choose without difficulty.
– Draconis
Mar 6 at 21:04
1
@ChristophBurschka: But if you do that, it's going to be way slower than a "natively" vectorized function, as well as producing silently wrong results if you aren't careful about having consistent output dtypes.
– user2357112
Mar 7 at 0:05
add a comment |
Thanks my friend!!! Do you have any idea what to do if some values in pandas dataframe are 0? Then, I cant use log function
– Aleksandar
Mar 6 at 17:13
1
(Note that if numpy has no equivalent of the function you want, you can also usenp.vectorize(function)
to turn any scalar function into a vector function.)
– Christoph Burschka
Mar 6 at 17:23
@Aleksandar At that point, you'll have to decide what you want to happen to the zeros. Numpy can handle whatever you choose without difficulty.
– Draconis
Mar 6 at 21:04
1
@ChristophBurschka: But if you do that, it's going to be way slower than a "natively" vectorized function, as well as producing silently wrong results if you aren't careful about having consistent output dtypes.
– user2357112
Mar 7 at 0:05
Thanks my friend!!! Do you have any idea what to do if some values in pandas dataframe are 0? Then, I cant use log function
– Aleksandar
Mar 6 at 17:13
Thanks my friend!!! Do you have any idea what to do if some values in pandas dataframe are 0? Then, I cant use log function
– Aleksandar
Mar 6 at 17:13
1
1
(Note that if numpy has no equivalent of the function you want, you can also use
np.vectorize(function)
to turn any scalar function into a vector function.)– Christoph Burschka
Mar 6 at 17:23
(Note that if numpy has no equivalent of the function you want, you can also use
np.vectorize(function)
to turn any scalar function into a vector function.)– Christoph Burschka
Mar 6 at 17:23
@Aleksandar At that point, you'll have to decide what you want to happen to the zeros. Numpy can handle whatever you choose without difficulty.
– Draconis
Mar 6 at 21:04
@Aleksandar At that point, you'll have to decide what you want to happen to the zeros. Numpy can handle whatever you choose without difficulty.
– Draconis
Mar 6 at 21:04
1
1
@ChristophBurschka: But if you do that, it's going to be way slower than a "natively" vectorized function, as well as producing silently wrong results if you aren't careful about having consistent output dtypes.
– user2357112
Mar 7 at 0:05
@ChristophBurschka: But if you do that, it's going to be way slower than a "natively" vectorized function, as well as producing silently wrong results if you aren't careful about having consistent output dtypes.
– user2357112
Mar 7 at 0:05
add a comment |
From what it seems math.log10
cannot handle neither pandas dataframes nor ndarrays.
So one option would be to go with numpy, which also includes a function to compute the base 10 logarithm, np.log10
, and reconstruct the dataframe as pointed out in other solutions.
Or if you want to go with math.log10
, and the same would apply to other functions that cannot be directly vectorized, you can use DataFrame.applymap
to apply math.log10
to the dataframe elementwise. Do note however that this solution will be slower than a vectorized approach using np.log10
.
Use case
Here's an example of how this could be done using 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
For the numpy
solution, you could take the np.log10
of the dataframe, and reconstruct it as:
pd.DataFrame(np.log10(data), index=df.index, columns=df.columns)
add a comment |
From what it seems math.log10
cannot handle neither pandas dataframes nor ndarrays.
So one option would be to go with numpy, which also includes a function to compute the base 10 logarithm, np.log10
, and reconstruct the dataframe as pointed out in other solutions.
Or if you want to go with math.log10
, and the same would apply to other functions that cannot be directly vectorized, you can use DataFrame.applymap
to apply math.log10
to the dataframe elementwise. Do note however that this solution will be slower than a vectorized approach using np.log10
.
Use case
Here's an example of how this could be done using 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
For the numpy
solution, you could take the np.log10
of the dataframe, and reconstruct it as:
pd.DataFrame(np.log10(data), index=df.index, columns=df.columns)
add a comment |
From what it seems math.log10
cannot handle neither pandas dataframes nor ndarrays.
So one option would be to go with numpy, which also includes a function to compute the base 10 logarithm, np.log10
, and reconstruct the dataframe as pointed out in other solutions.
Or if you want to go with math.log10
, and the same would apply to other functions that cannot be directly vectorized, you can use DataFrame.applymap
to apply math.log10
to the dataframe elementwise. Do note however that this solution will be slower than a vectorized approach using np.log10
.
Use case
Here's an example of how this could be done using 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
For the numpy
solution, you could take the np.log10
of the dataframe, and reconstruct it as:
pd.DataFrame(np.log10(data), index=df.index, columns=df.columns)
From what it seems math.log10
cannot handle neither pandas dataframes nor ndarrays.
So one option would be to go with numpy, which also includes a function to compute the base 10 logarithm, np.log10
, and reconstruct the dataframe as pointed out in other solutions.
Or if you want to go with math.log10
, and the same would apply to other functions that cannot be directly vectorized, you can use DataFrame.applymap
to apply math.log10
to the dataframe elementwise. Do note however that this solution will be slower than a vectorized approach using np.log10
.
Use case
Here's an example of how this could be done using 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
For the numpy
solution, you could take the np.log10
of the dataframe, and reconstruct it as:
pd.DataFrame(np.log10(data), index=df.index, columns=df.columns)
edited Mar 6 at 16:41
answered Mar 6 at 13:44
yatuyatu
15.6k41542
15.6k41542
add a comment |
add a comment |
You may want to use the applymap
method to apply math.log10
on the whole dataframe, here is the documentation.
You can test it:
df.applymap(math.log10)
add a comment |
You may want to use the applymap
method to apply math.log10
on the whole dataframe, here is the documentation.
You can test it:
df.applymap(math.log10)
add a comment |
You may want to use the applymap
method to apply math.log10
on the whole dataframe, here is the documentation.
You can test it:
df.applymap(math.log10)
You may want to use the applymap
method to apply math.log10
on the whole dataframe, here is the documentation.
You can test it:
df.applymap(math.log10)
edited Mar 6 at 14:16
IanS
8,75232864
8,75232864
answered Mar 6 at 13:45
Valentin MercierValentin Mercier
10710
10710
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55024529%2fhow-to-use-math-log10-function-on-whole-pandas-dataframe%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown