如何使用 MultiIndex 在 Python 数据框列中进行字符串替换

Posted

技术标签:

【中文标题】如何使用 MultiIndex 在 Python 数据框列中进行字符串替换【英文标题】:How to do a string replacement in Python dataframe columns with MultiIndex 【发布时间】:2021-04-17 20:58:54 【问题描述】:

我是 Python(和股市)的新手,因此我正在尝试同时学习这两者。 我目前的问题是,如果我使用 yfinance 从 NEL.OL 之类的代码下载数据,我会得到 AttributeError: 'DataFrame' object has no attribute 'NEL'。 但是,如果我改为绘制 NETE,它就可以工作。 所以问题可能是代码名称中的点。

import yfinance as yf
import plotly.graph_objects as go
from datetime import date
import plotly.io as pio
pio.renderers.default = "browser" 

today = date.today()

data = yf.download(tickers = "NETE NEL.OL",
        start="2020-01-01",       
        end=today.strftime("%Y-%m-%d"),
        interval = "1d",
        group_by = 'ticker',
        auto_adjust = True,
        prepost = True,
        threads = True,
        proxy = None
    )

fig = go.Figure(
    data=go.Ohlc(
        x=data.NEL.OL.index,
        open=data.NEL.OL["Open"],
        high=data.NEL.OL["High"],
        low=data.NEL.OL["Low"],
        close=data.NEL.OL["Close"]
        )
    )
fig.show()

我试图找到并替换为 '.'在列中 data.columns = data.columns.str.replace('.', '_') 导致错误:AttributeError: Can only use .str accessor with Index, not MultiIndex

解决方法 1 可能是绘图命令中的不同语法,采用“。”考虑到。 Workaraund no 2 可能是我找不到的正确搜索和替换语法。 两者都有解决方案吗?

干杯

【问题讨论】:

【参考方案1】:

您是否尝试过使用[] 访问?

fig = go.Figure(
    data=go.Ohlc(
        x=data['NEL.OL'].index,
        open=data['NEL.OL']["Open"],
        high=data['NEL.OL']["High"],
        low=data['NEL.OL']["Low"],
        close=data['NEL.OL']["Close"]
        )
    )

或者,您可以将列名中的点替换为下划线:

data.columns.set_levels(list(map(lambda x: x.replace('.', '_'), data.columns.get_level_values(0).drop_duplicates())), level=0, inplace=True)

fig = go.Figure(
    data=go.Ohlc(
        x=data.NEL_OL.index,
        open=data.NEL_OL["Open"],
        high=data.NEL_OL["High"],
        low=data.NEL_OL["Low"],
        close=data.NEL_OL["Close"]
        )
    )

【讨论】:

我已经更新了答案,添加了一种方法来替换列名中的点

以上是关于如何使用 MultiIndex 在 Python 数据框列中进行字符串替换的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python Pandas中将MultiIndex Dataframes与权重合并?

Python Multiindex - 如何在只有时间作为索引的数据框中创建分层多索引?

Python - reshape,pivot,unstack - multiindex

python 3 pandas和seaborn使用swarmplot进行斗争-multiIndex

Python 数据处理(二十九)—— MultiIndex 高级索引操作

在 Python 中使用 MultiIndex 和 to_excel 时创建的标题下方的空行