How to use math.log10 function on whole pandas dataframe2019 Community Moderator ElectionHow to merge two dictionaries in a single expression?How do I check whether a file exists without exceptions?Using global variables in a functionHow to make a chain of function decorators?Renaming columns in pandasHow can I replace all the NaN values with Zero's in a column of a pandas dataframeDelete column from pandas DataFrame by column name“Large data” work flows using pandasHow to iterate over rows in a DataFrame in Pandas?Select rows from a DataFrame based on values in a column in pandas
How would an energy-based "projectile" blow up a spaceship?
ESPP--any reason not to go all in?
After Brexit, will the EU recognize British passports that are valid for more than ten years?
Will the concrete slab in a partially heated shed conduct a lot of heat to the unconditioned area?
Does an unused member variable take up memory?
What exactly is the meaning of "fine wine"?
Paper published similar to PhD thesis
What is better: yes / no radio, or simple checkbox?
Why do phishing e-mails use faked e-mail addresses instead of the real one?
Tabular environment - text vertically positions itself by bottom of tikz picture in adjacent cell
Was this cameo in Captain Marvel computer generated?
Can multiple states demand income tax from an LLC?
Why does a car's steering wheel get lighter with increasing speed
How to install "rounded" brake pads
Giving a talk in my old university, how prominently should I tell students my salary?
Why do we call complex numbers “numbers” but we don’t consider 2-vectors numbers?
Can I challenge the interviewer to give me a proper technical feedback?
Why aren't there more Gauls like Obelix?
Can I negotiate a patent idea for a raise, under French law?
Create chunks from an array
PTIJ: Sport in the Torah
I've given my players a lot of magic items. Is it reasonable for me to give them harder encounters?
Is there a math expression equivalent to the conditional ternary operator?
Inorganic chemistry handbook with reaction lists
How to use math.log10 function on whole pandas dataframe
2019 Community Moderator ElectionHow to merge two dictionaries in a single expression?How do I check whether a file exists without exceptions?Using global variables in a functionHow to make a chain of function decorators?Renaming columns in pandasHow can I replace all the NaN values with Zero's in a column of a pandas dataframeDelete column from pandas DataFrame by column name“Large data” work flows using pandasHow to iterate over rows in a DataFrame in Pandas?Select rows from a DataFrame based on values in a column in pandas
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 2 days ago
yatu
12.7k31341
12.7k31341
asked 2 days ago
AleksandarAleksandar
988
988
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)
New contributor
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
2 days ago
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
2 days ago
@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
2 days ago
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
2 days ago
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)
New contributor
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
2 days ago
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
2 days ago
@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
2 days ago
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
2 days ago
add a comment |
Use the numpy version, not math
import numpy as np
np.log10(df)
New contributor
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
2 days ago
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
2 days ago
@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
2 days ago
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
2 days ago
add a comment |
Use the numpy version, not math
import numpy as np
np.log10(df)
New contributor
Use the numpy version, not math
import numpy as np
np.log10(df)
New contributor
New contributor
answered 2 days ago
ecortazarecortazar
2715
2715
New contributor
New contributor
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
2 days ago
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
2 days ago
@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
2 days ago
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
2 days ago
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
2 days ago
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
2 days ago
@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
2 days ago
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
2 days ago
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
2 days ago
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
2 days ago
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
2 days ago
(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
2 days ago
@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
2 days ago
@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
2 days ago
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
2 days ago
@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
2 days ago
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 2 days ago
answered 2 days ago
yatuyatu
12.7k31341
12.7k31341
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 2 days ago
IanS
8,56232763
8,56232763
answered 2 days ago
Valentin MercierValentin Mercier
9710
9710
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