You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Market列值修改DataFrame中Ticker列值的技术求助

解决Ticker列替换与条件追加问题

我确信这个问题有非常简单的解决方案,但我已经花了好几个小时尝试解决却无果!

复现用DataFrame

import pandas as pd

data = {"Market": ['NYSE','TSX','SPTSX','TSX60','SP500'],"Ticker": ['AGM.A','AEM','CCL.B','BBD-B','BRK.B']}
df = pd.DataFrame(data)

需求

  • 将Ticker列中的所有“.”替换为“-”
  • 若Market列的字符串中包含“TSX”,则在对应Ticker列值后追加“.TO”

期望最终Ticker列结果:AGM-A, AEM.TO, CCL-B.TO, BBD-B.TO, BRK-B

我尝试过但未成功的写法

if df['Market'].str.find('TSX').any(): 
    df['Ticker'] = df['Ticker'].str.replace('.','-') + '.TO'

for x in df['Market']:
    if x.str.find('TSX').any():
        data['Ticker'] = data['Ticker']+".TO"

df.loc[df.Market.str.contains('TSX').any(), 'Ticker'] = df.Ticker + ".TO"
#df['Ticker'] = df['Ticker'].astype(str) + '.TO'

正确解决方案

核心问题是错误使用了.any(),导致把整列的判断结果合并为单个布尔值,从而修改了所有行而非仅符合条件的行。正确实现分两步:

  1. 先全局替换Ticker中的.为-
  2. 精准定位Market包含TSX的行,追加.TO

完整代码:

# 第一步:替换所有.为-(regex=False避免正则匹配问题)
df['Ticker'] = df['Ticker'].str.replace('.', '-', regex=False)

# 第二步:给Market包含TSX的行追加.TO
df.loc[df['Market'].str.contains('TSX'), 'Ticker'] += '.TO'

运行后输出的Ticker列:

0      AGM-A
1    AEM.TO
2  CCL-B.TO
3  BBD-B.TO
4      BRK-B
Name: Ticker, dtype: object

错误代码解析

  • .any()会将Series的判断结果合并为一个布尔值(只要有一个元素符合就返回True),导致所有行都被修改,而非仅目标行
  • 循环遍历df['Market']时,x是单个字符串,没有.str属性,会触发AttributeError
  • str.find返回的是子串的索引位置(找不到返回-1),用.any()判断是否包含的逻辑错误,应该直接用str.contains做包含判断

内容的提问来源于stack exchange,提问作者Jeff C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:45:23