如何在Pandas股票数据输出中简便隐藏指定列(解决drop报错)
解决方案:简便隐藏指定列的几种方法
你不需要用df.drop()删除列,直接选择需要保留的列反而更直观高效,还能避免因列名错误导致的报错。以下是几种适合你场景的简便方案:
方法1:直接指定要保留的列(最推荐)
直接列出你需要展示的列名,一步到位生成目标DataFrame,完全不用处理要删除的列:
import pandas as pd from yahoo_fin import stock_info as si # 读取持仓文件 df = pd.read_csv("portfoy.csv") # 获取实时价格(示例:假设hisse_adı列是股票代码,土耳其股市后缀.IS可按需调整) df["anlik_fiyat"] = df["hisse_adı"].apply(lambda x: si.get_live_price(x + ".IS")) # 计算未平仓头寸:(实时价格 - 买入价) * 数量 df["acik_pozisyon"] = (df["anlik_fiyat"] - df["alis_fiyati"]) * df["miktar"] # 直接选择需要保留的列,跳过要隐藏的列 sonuc_df = df[["hisse_adı", "miktar", "alis_fiyati", "alis_tarihi", "anlik_fiyat", "acik_pozisyon"]] # 输出结果 print(sonuc_df)
方法2:用isin()反向排除指定列
如果需要保留的列太多,不想逐个列出,可以反向排除要隐藏的列:
# 定义要隐藏的列 gizlenecek_sutunlar = ["tip", "satis_fiyati", "satis_tarihi"] # 筛选出不在隐藏列表中的列 sonuc_df = df.loc[:, ~df.columns.isin(gizlenecek_sutunlar)]
方法3:用正则表达式过滤列
适合列名有规律的场景,用filter()配合正则排除指定列:
# 正则匹配:排除tip、satis_fiyati、satis_tarihi这三列 sonuc_df = df.filter(regex='^(?!tip|satis_fiyati|satis_tarihi).*$')
关于df.drop()报错的常见原因
你之前用drop()报错,大概率是这几个问题:
- 列名拼写错误(比如csv里是
Tip而代码里写的tip,大小写不匹配) - 目标列不存在于DataFrame中
- 忘记设置
axis=1(默认是行方向,删除列必须指定axis=1或columns=参数)
用上述选择列的方法,不仅更简便,还能在列名错误时直接抛出明确的KeyError,方便快速排查问题。
内容的提问来源于stack exchange,提问作者Oguz Han
相关产品推荐
相关产品推荐

