【发布时间】:2018-12-26 23:59:25
【问题描述】:
我有这样一个非常简单的函数:
import numpy as np
from numba import jit
import pandas as pd
@jit
def f_(n, x, y, z):
for i in range(n):
z[i] = x[i] * y[i]
f_(df.shape[0], df["x"].values, df["y"].values, df["z"].values)
我经过的地方
df = pd.DataFrame({"x": [1, 2, 3], "y": [3, 4, 5], "z": np.NaN})
我希望该函数会像这样修改数据z 列:
>>> f_(df.shape[0], df["x"].values, df["y"].values, df["z"].values)
>>> df
x y z
0 1 3 3.0
1 2 4 8.0
2 3 5 15.0
这在大多数情况下都可以正常工作,但不知何故无法修改其他数据。
我仔细检查了一些东西,然后:
- 我尚未确定任何可能导致此问题的数据点问题。
- 我看到打印结果时数据已按预期修改。
- 如果我从函数返回
z数组,它会按预期进行修改。
不幸的是,我无法将问题减少到最小的可重现情况。例如,删除不相关的列似乎“修复”了无法减少的问题。
我是否以不打算使用的方式使用jit?我应该注意哪些边境案件?或者它可能是一个错误?
编辑:
我找到了问题的根源。当数据包含重复的列名时会发生这种情况:
>>> df_ = pd.read_json('{"schema": {"fields":[{"name":"index","type":"integer"},{"name":"v","type":"integer"},{"name":"y","type":"integer"},
... {"name":"v","type":"integer"},{"name":"x","type":"integer"},{"name":"z","type":"number"}],"primaryKey":["index"],"pandas_version":"0.20.
... 0"}, "data": [{"index":0,"v":0,"y":3,"v":0,"x":1,"z":null}]}', orient="table")
>>> f_(df_.shape[0], df_["x"].values, df_["y"].values, df_["z"].values)
>>> df_
v y v x z
0 0 3 0 1 NaN
如果删除重复项,则该函数将按预期工作:
>>> df_.drop("v", axis="columns", inplace=True)
>>> f_(df_.shape[0], df_["x"].values, df_["y"].values, df_["z"].values)
>>> df_
y x z
0 3 1 3.0
【问题讨论】:
标签: python pandas numpy jit numba