如何在 Pandas 数据框的多列上 运行 Ta-Lib?
How to run Ta-Lib on multiple columns of a Pandas dataframe?
我有一个数据框,其中包含几种证券的价格作为列,我无法一次找到 运行 TA-Lib 的解决方案,因为它需要 numpy.ndarray。
我如何运行 TA-Lib 处理多种证券并在 return 中获得数据框?
import talib as ta
d = {'security1': [1,2,8,9,8,5], 'security2': [3,8,5,4,3,5]}
df = pd.DataFrame(data=d)
df
Out[518]:
security1 security2
0 1 3
1 2 8
2 8 5
3 9 4
4 8 3
5 5 5
ta.EMA(df, 2)
TypeError: Argument 'real' has incorrect type (expected numpy.ndarray, got DataFrame)
ta.EMA(df['security1'], 2)
Out[520]:
0 NaN
1 1.500000
2 5.833333
3 7.944444
4 7.981481
5 5.993827
dtype: float64
type(df['security1'])
Out[524]: pandas.core.series.Series
当我将数据框转换为 numpy.ndarray 时,它仍然抛出异常:
ta.EMA(df.values, 2)
Out[528]: Exception: input array type is not double
谢谢。
TA-Lib 需要浮点数据,而你的是整数。
因此,在构建数据框时,您需要通过指定 dtype=numpy.float64
:
来强制输入数据
import pandas
import numpy
import talib
d = {'security1': [1,2,8,9,8,5], 'security2': [3,8,5,4,3,5]}
df = pandas.DataFrame(data=d, dtype=numpy.float64) # note numpy.float64 here
TA-Lib 需要一维数组,这意味着它可以在 pandas.Series
上运行但不能在 pandas.DataFrame
.
上运行
但是,您可以使用 pandas.DataFrame.apply
对数据框的每一列应用一个函数
df.apply(lambda c: talib.EMA(c, 2))
security1 security2
0 NaN NaN
1 1.500000 5.500000
2 5.833333 5.166667
3 7.944444 4.388889
4 7.981481 3.462963
5 5.993827 4.487654
我有一个数据框,其中包含几种证券的价格作为列,我无法一次找到 运行 TA-Lib 的解决方案,因为它需要 numpy.ndarray。
我如何运行 TA-Lib 处理多种证券并在 return 中获得数据框?
import talib as ta
d = {'security1': [1,2,8,9,8,5], 'security2': [3,8,5,4,3,5]}
df = pd.DataFrame(data=d)
df
Out[518]:
security1 security2
0 1 3
1 2 8
2 8 5
3 9 4
4 8 3
5 5 5
ta.EMA(df, 2)
TypeError: Argument 'real' has incorrect type (expected numpy.ndarray, got DataFrame)
ta.EMA(df['security1'], 2)
Out[520]:
0 NaN
1 1.500000
2 5.833333
3 7.944444
4 7.981481
5 5.993827
dtype: float64
type(df['security1'])
Out[524]: pandas.core.series.Series
当我将数据框转换为 numpy.ndarray 时,它仍然抛出异常:
ta.EMA(df.values, 2)
Out[528]: Exception: input array type is not double
谢谢。
TA-Lib 需要浮点数据,而你的是整数。
因此,在构建数据框时,您需要通过指定 dtype=numpy.float64
:
import pandas
import numpy
import talib
d = {'security1': [1,2,8,9,8,5], 'security2': [3,8,5,4,3,5]}
df = pandas.DataFrame(data=d, dtype=numpy.float64) # note numpy.float64 here
TA-Lib 需要一维数组,这意味着它可以在 pandas.Series
上运行但不能在 pandas.DataFrame
.
但是,您可以使用 pandas.DataFrame.apply
对数据框的每一列应用一个函数
df.apply(lambda c: talib.EMA(c, 2))
security1 security2
0 NaN NaN
1 1.500000 5.500000
2 5.833333 5.166667
3 7.944444 4.388889
4 7.981481 3.462963
5 5.993827 4.487654