如何通过Pandas Loc生成含NaN的列表,或让mplfinance适配筛选后的数据?
解决mplfinance添加筛选数据的两种方法
方法一:初始化全NaN序列再赋值
先创建一个和原DataFrame长度完全一致、值全为NaN的Series,再把符合筛选条件的位置填充对应数值:
import pandas as pd import numpy as np import mplfinance as mpf # 假设你的df已存在,且索引为时间序列(mplfinance要求) # 1. 生成全NaN的Series,索引和df一致 signal_series = pd.Series(np.nan, index=df.index) # 2. 筛选出符合条件的值并填充到对应位置 signal_series.loc[df['column'] > 5] = df['column'].loc[df['column'] > 5] # 3. 如果需要列表格式,直接转成列表 signal_list = signal_series.tolist() # 直接用Series传入make_addplot即可 ap = mpf.make_addplot(signal_series) mpf.plot(df, addplot=ap)
方法二:用Pandas where函数一步生成
Pandas的where()方法会保留符合条件的原值,将不符合条件的设为NaN,直接生成符合要求的序列:
# 一行生成带NaN的Series signal_series = df['column'].where(df['column'] > 5) # 同样可以直接传入make_addplot ap = mpf.make_addplot(signal_series) mpf.plot(df, addplot=ap)
关于mplfinance的输入要求
mplfinance的make_addplot()需要输入长度和主数据df完全一致的序列(不管是Series还是列表),这样才能和图表上的每一个时间点一一对应。你之前用df.loc[df.column >5]得到的是原df的子集,长度不足,所以无法直接使用。而上面两种方法生成的序列,会在不符合条件的位置填充NaN,正好满足mplfinance的格式要求。
内容的提问来源于stack exchange,提问作者100xln2
相关产品推荐
相关产品推荐

