-
2021-06-03 11:03:57
项目场景:
在做特征分桶之前的时候,先想对df的一列取log。
问题描述:
网上搜了好久的方法,都没有说怎么解决,大概搜到了2种相近的解决方法,都不尽人意。
第一个是用math.log(),第二个使用np.log()。可以看出如下都会报错,math只能处理real number,不能处理column。np的话会把表头带进去导致无法计算。
df = df.withColumn('mgame_online_90_xxxc',math.log(df.mgame_online_90_rpg+1)+1) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-16-5a6abbda081b> in <module> 1 # import numpy as np ----> 2 df = df.withColumn('mgame_online_90_xxxc',math.log(df.mgame_online_90_rpg+1)+1) TypeError: must be real number, not Column
import numpy as np df = df.withColumn('mgame_online_90_xxxc',np.log(df.mgame_online_90_rpg+1)+1) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-15-f6debe1c3dd1> in <module> 1 import numpy as np ----> 2 df = df.withColumn('mgame_online_90_xxxc',np.log(df.mgame_online_90_rpg+1)+1) TypeError: loop of ufunc does not support argument 0 of type Column which has no callable log method
原因分析:
想了一下午觉得np可能会有突破方式,比如把表头去掉,然后最后再加上之类的操作。但是感觉异常复杂,stack overflow也没找到相关的解决方法。
第二天来想,能不能用lambda表达式+map之类的处理方式。找了半天还是没有,最后突发奇想去官方文档里面搜“log”关键字,说不定有呢?
解决方案:
果然在里面发现了pyspark.sql.functions.log方法。http://spark.apache.org/docs/1.6.2/api/python/pyspark.sql.html#pyspark.sql.functions.log
最后还是应该去看官方文档,应该早点去看的啊。。。
pyspark.sql.functions.log(arg1, arg2=None)
Returns the first argument-based logarithm of the second argument.
If there is only one argument, then this takes the natural logarithm of the argument.
>>> df.select(log(10.0, df.age).alias('ten')).map(lambda l: str(l.ten)[:7]).collect() ['0.30102', '0.69897']
>>> df.select(log(df.age).alias('e')).map(lambda l: str(l.e)[:7]).collect() ['0.69314', '1.60943']
New in version 1.5.
所以直接import,然后用就行了。
from pyspark.sql.functions import col, log df = df.withColumn('mgame_online_90_xxxc',log(col("mgame_online_90_xxxc")+1)+1)
更多相关内容 -
pandas入门: 对一列取对数或者指数
2020-03-08 22:05:45pandas中对某一列数据取对数或者指数相关操作。 创建一个dataframe import pandas as pd import numpy as np df = pd.DataFrame([[2, 3], [3, 4]], columns=list("AB")) 结果如下: A B 0 2 3 1 3 4 log1p ...pandas中对某一列数据取对数或者指数相关操作。
- 创建一个dataframe
import pandas as pd import numpy as np df = pd.DataFrame([[2, 3], [3, 4]], columns=list("AB"))
结果如下:
A B 0 2 3 1 3 4
- log1p
对A列做log(x + 1)
# 对A列做log(x + 1) df["A"] = df["A"].apply(np.log1p) # np.log1p与np.expm1互为逆运算
结果如下:
A B 0 1.098612 3 1 1.386294 4
- expm1
# 对A列执行函数e的x次幂-1 df["A"] = df["A"].apply(np.expm1) # np.log1p与np.expm1互为逆运算
结果如下:
A B 0 6.389056 3 1 19.085537 4
- exp
# 对A列求e的次数幂 df["A"] = df["A"].apply(np.exp) # np.exp与np.log互为逆运算
结果如下:
A B 0 7.389056 3 1 20.085537 4
-
log
# 对A列取对数 df["A"] = df["A"].apply(np.log) # np.exp与np.log互为逆运算
结果如下:
A B 0 0.693147 3 1 1.098612 4
- sqrt
# 对A列开平方 df["A"] = df["A"].apply(np.sqrt)
结果如下:
A B 0 1.414214 3 1 1.732051 4
- exp2
# 对A列计算平方 df["A"] = df["A"].apply(np.exp2) # np.exp2与np.log2互为逆运算
结果如下:
A B 0 4.0 3 1 8.0 4
- log2
# 对A列计算以2为底的对数 df["A"] = df["A"].apply(np.log2) # np.exp2与np.log2互为逆运算
结果如下:
A B 0 1.000000 3 1 1.584963 4
-
百思不得其解:python中对dataframe数据集取对数ln计算得出的值不正确
2022-04-22 22:04:13python中对dataframe取对数得到的数值是错误的最近在计算上证综指的对数收益率,用到了如下代码:
#计算日对数收益率 SZ["close_lag"] = SZ["close"].shift(1) SZ["ln_clo"] = SZ["close"].apply(np.log) SZ["ln_clo_lag"] = SZ["close_lag"].apply(np.log) SZ["r"]=SZ["ln_clo"]-SZ["ln_clo_lag"]
出来的结果是这样的:
以2019-01-03这一行为例子,dataframe计算结果为:
ln(2464.36)-ln(2465.29)=-0.000376578
但是!!!
科学计算器计算的结果为:-0.000377309,为什么会有这么大的差距啊?
-
关于python:取列的对数
2020-12-09 01:58:28我对编程非常陌生(在python中),我想创建一个新变量,该变量是列的对数(来自导入的excel文件)。 我尝试过从该站点尝试不同的解决方案,但始终出现错误。 我最新的错误是AttributeError: 'str' object has no ...我对编程非常陌生(在python中),我想创建一个新变量,该变量是列的对数(来自导入的excel文件)。 我尝试过从该站点尝试不同的解决方案,但始终出现错误。 我最新的错误是AttributeError: 'str' object has no attribute 'log'.
我已经删除了所有不是"数字"的值,但是我仍然不知道如何将值从字符串转换为整数(如果是这种情况,因为" int(neighborhood)"不起作用)。
这是我现在拥有的代码:
import pandas as pd
import numpy as np
df=pd.read_excel("kwb-2016_del_col_del_row.xls")
df = df[df.m_woz !="."] # drop rows with values"."
neighborhood=df[df.recs=="Neighborhood"]
neighborhood=neighborhood["m_woz"]
print(neighborhood)
np.log(neighborhood)
这是我得到的错误:
AttributeError Traceback (most recent call last)
in ()
12 print(neighborhood)
13
---> 14 np.log(neighborhood)
AttributeError: 'str' object has no attribute 'log'
有人可以帮我吗?
但是解决该问题的方法是在注释y=np.log(buurt["g_woz"])中的下面两行。
感谢您的快速回复!该行也会产生错误(键错误)。如果我从该行中删除密钥,则会收到与上述相同的错误
然后,该列的名称不是g_woz。请不要仅仅丢弃那些出错的部分,这通常不是调试代码的好方法。
我不知道该怎么办,因为我很确定那是列的名称
@WillemVanOnsem我无法复制整个错误,但这是错误的开始:TypeError:必需为整数在上述异常的处理过程中,发生了另一个异常:KeyError Traceback(最近一次调用最近)
请重置您的内核,似乎您在此过程中已将np分配给其他内容。
buurt和neighborhood之间是什么关系?同样,在索引时使用.loc是一个好主意。
对不起,我已将此网站的英语更改为英语,但是很遗憾,我忘记在错误中进行更改。抱歉在错误中buurt = neighborhood
@Kate看来您已经掩饰了我的评论。您是否重新启动了内核?
@Kate:请编辑您的问题。
@c ??? s ????是的,我做到了。两次,但仍然是相同的错误
@WillemVanOnsem我应该怎么编辑?
@Kate这样做... del np; import numpy as np
Aaaaand,有效吗?
@c ??? s ????这样做了,我仍然遇到相同的错误
也许您不是要删除自己认为的数据?
尝试打印数据类型以查看它们是什么。
在DataFrame中,您的列可能用对象而不是数字填充。
print(df.dtypes)
另外,您可能想看看这两页
根据对象的类型(即str)从DataFrame中选择行
熊猫:将dtype对象转换为int
这是我构建并交互运行的示例,可以正确获取对数(不要键入>>>):
>>> raw_data = {'m_woz': ['abc', 'def', 1.23, 45.6, '.xyz'],
'recs': ['Neighborhood', 'Neighborhood',
'unknown', 'Neighborhood', 'whatever']}
>>> df = pd.DataFrame(raw_data, columns = ['m_woz', 'recs'])
>>> print(df.dtypes)
m_woz object
recs object
dtype: object
请注意,类型是对象,而不是float或int或str
继续,这是df和neighborhood的样子:
>>> df
m_woz recs
0 42 Neighborhood
1 def Neighborhood
2 1.23 unknown
3 45.6 Neighborhood
4 .xyz whatever
>>> neighborhood=df[df.recs=="Neighborhood"]
>>> neighborhood
m_woz recs
0 42 Neighborhood
1 def Neighborhood
3 45.6 Neighborhood
这是窍门...
此行选择neighborhood中int或float的所有行(如果复制/粘贴此行,请小心修复缩进
>>> df_num_strings = neighborhood[neighborhood['m_woz'].
apply(lambda x: type(x) in (int, float))]
>>> df_num_strings
m_woz recs
0 42 Neighborhood
3 45.6 Neighborhood
快到了...将数字从字符串转换为浮点数
>>> df_float = df_num_strings['m_woz'].astype(str).astype(float)
>>> df_float
0 42.0
3 45.6
最后,计算对数:
>>> np.log(df_float)
0 3.737670
3 3.819908
Name: m_woz, dtype: float64
这工作了! 除了apply函数的一部分之外,因为所有值都不被视为浮点数或整数,但是astype函数起作用。 我不知道为什么,但是我以前曾经尝试过那个,然后就没用了。 也许我尝试后更改了代码。 非常感谢您对@ coldspeed,WillemVanOnsem和akubot的努力!
@Kate好消息,如果您不介意,请将答案标记为正确
-
利用MATLAB对矩阵或者数组逐行逐列取相对值
2020-12-02 14:00:46由于很多数据的变量间存在级别差异,直接比较两者的变化会不如人意。对数据的不同变量进行相对值变换,可以消除不同变量的量级问题。 -
pandas DataFrame某一列数据取log
2021-05-18 16:20:53在做毕业设计时,爬取到一组信息后,进行可视化,结果如下 数据差别过大,想把箭头所指部分展开,因此对数据取log predata1['Vote']=np.log(predata1['Vote']) 再进行可视化结果如下 -
基于python log取对数详解
2020-12-09 01:58:25基于python log取对数详解log()方法返回x的自然对数,对于x>0。语法以下是log()方法的语法:import mathmath.log( x )注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用... -
python取对数及作对数差在绘制散点图中的作用
2022-04-04 15:51:20这行代码中,data是一个DataFrame格式的数据,这行代码的作用是,对每个数据取对数,再作差分(本行减去前一行作为本行的值,因此与原数据相比,第一行均为NAN),再去掉数据中为NAN的行。 这行代码运用在我的数据上... -
MATLAB如何提取某一矩阵的某一列的部分数据?
2021-01-15 02:01:15展开全部使用2113a(M,N)可以提取矩阵a中符合5261M,4102N要求的部分最简单1653是M,N都是标量,就是一回个数例如:答a(1,1) a(2,3)分别返回a矩阵1行1列的单元 和 2行3列的单元M,N还可以是矢量,例如:a([1 2 3 4],... -
在SAS数据集中插入列并赋值
2015-06-19 01:04:12data students1; input name$ major$ t1 t2 t3; cards; 张三 math 62 82 92 李四 eng 73 83 93 王五 geo 66 76 86 刘六 history 80 90 100 ; run;.../*alter是数据集结构修改关键字,后有 -
R语言使用log函数计算对数、自定义指定底数
2022-04-21 18:08:51R语言使用log函数计算对数、自定义指定底数 -
Python中求对数方法总结
2020-03-09 14:50:54Python中Math库和Python库都具备求对数的函数。 import numpy as np import math 1. Numpy库 1.1 求以e、2、10为底的对数 函数 功能 np.log(x) 以e为底的对数(自然对数) np.log10(x) 以10为底的对数 np... -
探索性数据分析(四)——特征工程(对数转换、标准化/归一化、离散化、标签编码、独热编码、Dummy变量)
2020-09-02 11:33:26特征工程的基础介绍和常用方法总结,包括对数转换、特征标准化、离散化、Label Encoder、OneHot Encoder 以及 Dummy Variables。 -
计算自然对数的算法
2020-12-08 13:59:03引言我们知道,对数函数 ln(x) 可以展开为泰勒级数:但是下面这个泰勒级数展开式收敛得更快:经过简单计算可知上式中 y = (x - 1) / (x + 1) 。实现该算法的 C# 程序根据上面的第二个泰勒级数展开式,我们可以为 C# ... -
matlab数据取整方法
2021-05-08 05:47:26使用方法:B = round(A)对数组A中每个元素朝最近的方向取整数部分,并返回与A同维的整数数组B,对于一个复数参量A,则分别对其实部和虚数朝最近的方向取整数部分,并返回一复数数据B。例子:ceil(x)返回不小于x的... -
使用Python编程实现对数几率回归模型(不调用现成的对数几率回归函数),并对Iris数据集进行分类以验证模型...
2020-12-27 15:20:21使用Python编程实现对数几率回归模型(不调用现成的对数几率回归函数),并对Iris数据集进行分类以验证模型的效能导入数据集数据划分训练模型损失函数结果展示源码分享 导入数据集 利用sklern.datasets已有的load_... -
【matlab】对数据分段均值
2021-05-09 18:00:301、对一段数据进行分段均值处理 x_500= randi([-3,3],1,508000)*0.5; anum = 1000;%anum 个数进行一次均值处理 for i=1:1:floor(length(x_500)/anum) num = anum; temp = 0; while(num~=0) temp = x_500((i-1)*... -
matlab对数函数-对数函数,MATLAB
2021-04-18 06:04:59本教程分享:《matlab对数函数》,MATLAB 中如何输入 对数函数方法/步骤1、自然数对数 log(x)我们在MATLAB主窗口中输入a1=log(2.7183),回车,我们可以看到a1近似为1,e约等于2.7183,2、以2为底数的对数 log2(x)我们... -
GraphPad Prism绘图教程 | 如何制作对数坐标的图表
2020-12-19 15:42:20这篇文章,我们介绍一下如何让图表坐标轴以对数为刻度显示(只是显示方式的差别,这种操作不会改变你的数据),以及如何将原始数据转换为对数。创建一个对数刻度坐标轴在轴上双击打开Format Axes对话框【坐标轴格式】... -
c#使用linq把多列的List转化为只有指定列的List
2021-01-21 17:19:55C#中Linq查询基本操作使用实例c#中LINQ的基本用法实例C#中的Linq to Xml详解C# Linq读取XML文件的实例C#使用linq对数组进行筛选排序的方法C#使用LINQ查询表达式的基本子句总结C#使用linq查询大数据集的方法解决C#中... -
python中的对数log函数表示及用法
2021-04-27 05:30:00python中的对数log函数表示及用法在数学运算中,如果没有计算器,对于很大的数字相乘,我们花费大量的时间计算,而且一旦出错,就要重新计算,很是麻烦。其实对于数字相乘,不依靠靠计算器,想要准确简单的运算的... -
用Excel绘制标准曲线(画半对数坐标)
2020-12-19 15:42:10算术坐标系统:就是普通的笛卡儿坐标,横纵的刻度都是是等距的。(举例来说:如果每1cm的长度都代表2,则刻度按照顺序0,2,4,6,8,...只有一个坐标轴是对数坐标,另一个是普通算术坐标,如下图所示:首先,将数据整... -
数据归一化处理方法 数据处理之标准化/归一化方法
2020-12-28 20:28:46主要是为了数据处理方便提出来的,把数据映射到0~1范围之内处理,更加便捷快速,应该归到数字信号处理范畴之内。...把有量纲表达式变为无量纲表达式归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,... -
Python 对数据集进行归一化处理并存储为 mat 格式的文件
2021-12-07 14:14:56实验所使用的数据集作为实验的重要组成部分,我们往往需要对拿来的数据集进行数据预处理工作,因为通常使用的数据集往往都是来自各行各业的数据,而一个数据集往往具有多个属性,每个属性的值是否使用的同一量纲,这... -
matlab快速傅里叶变换(三个matlab程序介绍)
2021-04-18 09:01:09描述一种积分变换,它来源于函数的傅里叶积分表示。积分 (1) 称为ƒ 的傅里叶积分。周期函数在一定条件下可以展成傅里叶级数,而在(-∞,∞)上定义的非周期函数ƒ,显然不能用三角级数来表示。但是J.-B.-J.傅里叶... -
取出二维数组中某一列的所有值
2020-12-21 14:07:49https://www.cnblogs.com/Steven-shi/p/5897745.html PHP之提取多维数组指定列的方法 前言:有... 7 8 //这三个变种方法作用比较局限,仅在获取第一列或最后一列的时候有用,在 9 //复杂的数组中就难以发挥作用了。 -
如何利用MATLAB对数据统计分析?
2020-04-15 18:53:02本文是科学计算与MATLAB语言的专题6的第1小节总结笔记,并结合了自己一点的理解,看完本文,可以轻松借助MATLAB对数据进行分析,如求矩阵或向量的最大元素、最小元素、平均值、中值等等。 1 求最大元素与最小元素 ... -
STATA 常用模型与命令
2020-08-07 14:48:01STATA常用命令数据相关生成新数据删除和修改数据改变数据类型条件命令取对数命令输出相关常用回归非线性选择回归logit回归probit回归线性回归OLSHeckman 回归Tobit回归2SLS回归(工具变量法)常用检验异方差检验多重... -
超硬核!数据结构学霸笔记,考试面试吹牛就靠它
2021-03-26 11:11:21上次发操作系统笔记,很快浏览上万,这次数据结构比上次硬核的多哦,同样的会发超硬核代码,关注吧。 -
透彻理解“对数”概念及其在量化交易中的意义
2019-03-18 16:35:03透视一个数学概念,目前看需要从三个层面:数学史、数学概念、...15世纪,法国数学家N.Chuquet(1445-1488)在其《算学三部》中给出双数列的对应关系。 1 2 4 8 16 32 64 128 ... # 数列一:等比数列 0 1 2 3 4 5 6 ...