python数组取对数_关于python:取列的对数

我对编程非常陌生(在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好消息,如果您不介意,请将答案标记为正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值