pandas 适用于 numpy interp,维数问题
pandas apply with numpy interp, dimension problems
我想将在一组动态频率下进行的测量插入到一组固定频率中。我使用 Python 3.7 与 pandas.apply 和 numpy.interp:
import numpy as np
import pandas as pd
df = pd.DataFrame({'m1':[2.,3.],
'm2':[4.,6.],
'm3':[2.,3.],
'shift':[1.1,1.2]})
print (df)
# m1 m2 m3 shift
# 0 2.0 4 2.0 1.1
# 1 3.0 6 3.0 1.2
freqs =np.array([10.,20.,30.])
def myfunction(x):
newfreqs = freqs*x[-1]
result = np.interp(freqs,newfreqs,x[:-1])
return result
print(df.apply(myfunction, axis=1,raw=True))
当我 运行 代码时出现错误:
ValueError: Shape of passed values is (3, 2), indices imply (4, 2)
如果我将 输入列之一更改为 int 类型,f.ex。
'f2':[4,6]
然后没有错误,返回正确答案。
感谢任何帮助。
问题是您正在尝试 return 一个不减少的数组。您可以改为 return 值列表。
def myfunction(x):
newfreqs = freqs*x[-1]
result = np.interp(freqs, newfreqs, x[:-1])
return [*result]
df.apply(myfunction, axis=1, raw=True)
#0 [2.0, 3.6363636363636367, 2.5454545454545454]
#1 [3.0, 5.0, 4.5]
#dtype: object
如果你需要内插的DataFrame,那么也许:
import pandas as pd
pd.DataFrame(df.apply(myfunction, axis=1 ,raw=True).tolist(),
columns=df.columns[0:3]).add_suffix('_interp')
# m1_interp m2_interp m3_interp
#0 2.0 3.636364 2.545455
#1 3.0 5.000000 4.500000
我想将在一组动态频率下进行的测量插入到一组固定频率中。我使用 Python 3.7 与 pandas.apply 和 numpy.interp:
import numpy as np
import pandas as pd
df = pd.DataFrame({'m1':[2.,3.],
'm2':[4.,6.],
'm3':[2.,3.],
'shift':[1.1,1.2]})
print (df)
# m1 m2 m3 shift
# 0 2.0 4 2.0 1.1
# 1 3.0 6 3.0 1.2
freqs =np.array([10.,20.,30.])
def myfunction(x):
newfreqs = freqs*x[-1]
result = np.interp(freqs,newfreqs,x[:-1])
return result
print(df.apply(myfunction, axis=1,raw=True))
当我 运行 代码时出现错误:
ValueError: Shape of passed values is (3, 2), indices imply (4, 2)
如果我将 输入列之一更改为 int 类型,f.ex。
'f2':[4,6]
然后没有错误,返回正确答案。
感谢任何帮助。
问题是您正在尝试 return 一个不减少的数组。您可以改为 return 值列表。
def myfunction(x):
newfreqs = freqs*x[-1]
result = np.interp(freqs, newfreqs, x[:-1])
return [*result]
df.apply(myfunction, axis=1, raw=True)
#0 [2.0, 3.6363636363636367, 2.5454545454545454]
#1 [3.0, 5.0, 4.5]
#dtype: object
如果你需要内插的DataFrame,那么也许:
import pandas as pd
pd.DataFrame(df.apply(myfunction, axis=1 ,raw=True).tolist(),
columns=df.columns[0:3]).add_suffix('_interp')
# m1_interp m2_interp m3_interp
#0 2.0 3.636364 2.545455
#1 3.0 5.000000 4.500000