【问题标题】:Trying to divide two columns of a dataframe but get Nan试图划分数据框的两列但得到 Nan
【发布时间】:2021-10-27 22:27:53
【问题描述】:

背景

我处理一个数据框,并希望将此数据框的两列分开以获得一个新列。代码如下:

import pandas as pd

df = {'drive_mile': [15.1, 2.1, 7.12], 'price': [40, 9, 31]}
df = pd.DataFrame(df)
df['price/km'] = df[['drive_mile', 'price']].apply(lambda x: x[1]/x[0])
print(df)

我得到以下结果:

drive_mile  price  price/km
0       15.10     40       NaN
1        2.10      9       NaN
2        7.12     31       NaN

为什么会发生这种情况?我该如何解决?

【问题讨论】:

  • df[['drive_mile', 'price']].apply(lambda x: x[1]/x[0], axis = 1)
  • 谢谢,没想到会这么简单……
  • 您使用 apply 的任何具体原因?更有效的方法是df.price/df.drive_mile
  • 我习惯用apply来处理一个dataframe,所以没多想。下次直接用除法,谢谢!

标签: python-3.x pandas


【解决方案1】:

正如 cmets 中所指出的,您错过了使用 apply 在正确维度上执行除法的 axis=1 参数。这是因为在重新加入 DataFrame 时,您最终会得到不同的索引。

但是,更重要的是,不要使用 apply 来执行除法!。与向量操作相比,Apply 的效率通常要低得多。

使用div:

df['price/km'] = df['drive_mile'].div(df['price'])

/:

df['price/km'] = df['drive_mile']/df['price']

【讨论】:

  • 好的,我认为这是一种更安全、更快捷的方式,谢谢!
猜你喜欢
  • 2021-10-01
  • 2020-03-12
  • 2021-11-19
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 2016-12-31
  • 2021-06-21
  • 2016-11-27
相关资源
最近更新 更多