将log2变换应用于Pandas DataFrame

3
我想使用applymapnp2.log2对数据应用log2,并使用箱线图展示它,这是我编写的代码:

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

data = pd.read_csv('testdata.csv')
df = pd.DataFrame(data)

################################
    # a.
df.boxplot()
plt.title('Raw Data')

################################
    # b.
df.applymap(np.log2)
df.boxplot()
plt.title('Normalized Data')

以下是我得到的原始数据的箱线图,这是可以的,但是在应用log2转换后,我得到了相同的箱线图!!!请问有人能告诉我我做错了什么,应该如何使用applymap和np.log2来纠正并获得归一化的数据?

enter image description here

1
{btsdaf} - Shihe Zhang
{btsdaf} - Hashmatullah Noorzai
{btsdaf} - Hashmatullah Noorzai
@Hazmat Glad to be helpful. - Shihe Zhang
在接受答案之前,@Hazmat最好停下来重新考虑一下是否applymap是在这里使用的正确函数。 - cs95
显示剩余4条评论
3个回答

15

一个更快的方法是:

df = np.log2(df)

不要忘记将结果分配回df


{btsdaf} - Hashmatullah Noorzai
{btsdaf} - cs95
{btsdaf} - Hashmatullah Noorzai

3
根据API参考文档中的说明,DataFrame.applymap(func)方法将应用于DataFrame的每个元素,类似于对DataFrame中的每个Series执行map(func, series)操作。 它不会改变DataFrame本身,你需要获取返回值并使用它。

1
虽然你的建议并不是“错误”的,但当numpy同样擅长一次处理整个数据框时,它非常低效。我在答案中添加了一些计时,这样你就可以看到发生了什么。applymap和嵌套循环没有什么区别。 - cs95
{btsdaf} - Shihe Zhang

2
熊猫(Pandas)现在有transform()函数,对于您的情况来说,它相当于:
df = df.transform(lambda x: np.log2(x))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接