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

求助:DataFrame.loc语句部分返回0异常,需按Loop列匹配Call列值

Pandas按Loop列值获取Call列首次出现值异常修复

需求与问题

需要根据DataFrame的Loop列值,获取Call列对应值的首次出现。现有代码在前19行(索引0至18)运行正常,之后开始返回0。程序用于G代码转SVG,结构为串行编写,仅需修复目标语句,无需重写整体。已确认Active_Loop为正确整数1,转字符串前数据无误,DataFrame内值也正确,语句无语法错误。

问题代码

Current_Call = Loop_Data_Frame.loc[Loop_Data_Frame["Loop"].str.contains(str(Active_Loop), na=False), "Call"].values[1]

对应DataFrame数据

Loop data frame Line 1177 - Loop_Data_Frame:
    Loop  Call  Line                                           Text
0     0     0     0                          2660 G83 X-46 Y+0 Z+0
1     0     0     0                          2661 G83 X-46 Y+0 Z+0
2    60     0     1           27 G01 G90 X+63.45 Y-18.45 F9998 M13
3    60     0     2  28 G83 P01 -2 P02 -10.1 P03 -10 P04 0 P05 571
4    60     0     3                                         29 G79
5    60     0     4                        30 G56 G91 X+46 Y+0 Z+0
6    60     0     5                                      31 G98 L0
7    61     0     1                          42 G01 G91 Z-3.5 F499
8    61     0     2                             43 G01 G90 X+136.5
9    61     0     3                                     44 G98 L62
10   62     0     1                              45 G01 G90 Y-60.5
11   62     0     2                                46 G01 G91 X-46
12   62     0     3                               47 G01 G90 Y+0.5
13   62     0     4                                      48 G98 L0
14   62     0     1                                 50 G01 G90 X-7
15   62     0     2                                      51 G98 L0
16   63     0     1                 57 G01 G90 X+63.45 Y-18.45 M13
17   63     0     2                            58 G01 G90 Z-1 F499
18   63     0     3                                      59 G98 L1
19    1     0     1                          60 G07 G91 Z-4.9 F250
20    1     0     2                        61 G07 G91 Z+10.3 F9998
21    1     0     3                        62 G07 G91 Z-10.3 F1000
22    1     0     4                        63 G01 G90 Y-41.55 F499
23    1     0     5                             64 G01 G90 X+71.55
24    1     0     6                             65 G01 G90 Y-18.45
25    1     0     7                             66 G01 G90 X+63.45
26    1     0     8                                      67 G98 L0

问题原因

  1. 字符串匹配误判:str.contains(str(Active_Loop))会匹配所有包含目标数字的字符串,比如Active_Loop=1时,Loop=61、62、63都会被误匹配(这些值的字符串形式包含"1")。
  2. 硬取索引错误:.values[1]固定取第二个匹配元素,而不是首次出现的对应Loop值的元素,导致取到的是前面误匹配行的Call值(均为0)。

修复方案

将字符串模糊匹配改为数值精确匹配,同时取首次出现的元素:

Current_Call = Loop_Data_Frame.loc[Loop_Data_Frame["Loop"] == Active_Loop, "Call"].iloc[0]
  • Loop == Active_Loop:精确匹配Loop列的数值,避免模糊匹配的误判
  • .iloc[0]:取匹配结果中的第一个元素,即Call列的首次出现值,比.values[0]更安全(无匹配项时会抛出明确异常,便于调试)

可选容错处理

如果需要处理无匹配项的情况,可添加默认值:

match_rows = Loop_Data_Frame[Loop_Data_Frame["Loop"] == Active_Loop]
Current_Call = match_rows["Call"].iloc[0] if not match_rows.empty else 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:46:04