tag*_*aga 10 python numpy pandas
我想获取熊猫数据框中每个值的对数。我已经尝试过了,但是没有用:
#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)
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
TypeError:必须是实数,而不是DataFrame
你有什么想法吗?
eco*_*zar 22
使用numpy版本,而不是数学
import numpy as np
np.log10(df)
Run Code Online (Sandbox Code Playgroud)
yat*_*atu 12
从看来,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
Run Code Online (Sandbox Code Playgroud)
对于numpy解决方案,您可以采用np.log10数据框的,并将其重建为:
pd.DataFrame(np.log10(data), index=df.index, columns=df.columns)
Run Code Online (Sandbox Code Playgroud)
您可能想使用该applymap方法应用于math.log10整个数据框,这里是文档。
你可以测试一下:
df.applymap(math.log10)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2055 次 |
| 最近记录: |