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

函数结果无法存入数组:'int'对象无'split'属性报错解决

问题解决:AttributeError: 'int' object has no attribute 'split'

问题说明

需要将类似"2000,12"的字符串转换为2000-Dec格式,单独调用转换函数ex1_b("2000,12")可以正常输出,但循环将date数组元素传入函数时,出现以下报错:

AttributeError                            Traceback (most recent call last)
Cell In[460], line 4
      1 new_format = []
      3 for i in range (0, len(date)):
----> 4     new_format.append(ex1_b(date[i]))
      6 print(new_format)

Cell In[459], line 15, in ex1_b(date)
     11 f_date = date_val[date_val.columns[0]]
     12 # f_date = date_val[date_val.columns[0]]
     13 # s_value = date_val.iloc[:,1].values
---> 15 years =  int(date.split(",")[0]) # even if I change to str() no change
     16 months = int(date.split(",")[1])
     17 # matrix_b.to_csv("matrix-B.csv", index=False)
     18 # input = [int(i) for i in date.split(",")]
     19 # input = [int(i) for i in f_date.str.split(",")]

AttributeError: 'int' object has no attribute 'split'

用户代码如下:

date_val = {'date' : [],
            'value' : []}

for i in range(0, 25):
    for j in range(0, 12):
        month = str(j+1).zfill(2)
        date_val['date'].append( str(year[i]) + "," + month)
        date_val['value'].append(df.loc[i,j+1])
        date.append(str(year[i]) + "," + month)
        value.append(df.loc[i,j+1])
date_val = pd.DataFrame(date_val)


mon = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
def ex1_b(date:str):
    f_date = date_val[date_val.columns[0]] #IN CASE I WILL NEED IT

    years =  int(date.split(",")[0])
    months = int(date.split(",")[1])

    if(years<2022 or years>1996 or months>0 or months<13):
        year_month = f"{str(years)}-{mon[months-1]}"

    return year_month
print(ex1_b("2000,12")) #WORKS

# THE PROBLEM
new_format = []
for i in range (0, len(date)):
    new_format.append(ex1_b(date[i]))

print(new_format)

问题根源

报错明确指出:传入ex1_b的参数是整数类型,而整数没有split()方法。这说明date数组中存在整数元素,并非全是预期的"YYYY,MM"格式字符串。可能是date数组在循环前被错误初始化,或者year[i]的类型导致拼接时出现异常,也可能是其他代码修改了date数组的元素类型。

修复方案

方案1:强制将输入转为字符串(最直接)

修改循环调用的代码,确保传入函数的是字符串:

new_format = []
for i in range (0, len(date)):
    # 强制转成字符串后再传入函数
    new_format.append(ex1_b(str(date[i])))

方案2:在函数内部做类型处理

修改ex1_b函数,先将输入转为字符串,同时修正条件判断的逻辑错误(原条件用or会导致所有情况都满足,应该用and限定合法范围):

mon = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
def ex1_b(date_input):
    # 先将输入转为字符串,避免整数传入报错
    date = str(date_input)
    # 拆分年份和月份
    year_str, month_str = date.split(",")
    years = int(year_str)
    months = int(month_str)
    
    # 修正条件:年份在1996-2022之间,月份在1-12之间
    if 1996 <= years <= 2022 and 1 <= months <= 12:
        year_month = f"{years}-{mon[months-1]}"
    else:
        # 处理非法格式,返回原字符串或自定义提示
        year_month = date
    
    return year_month

方案3:检查date数组的初始化和填充

确保date数组在循环前是一个空列表,且循环中只添加字符串:

# 提前初始化空列表,避免之前的变量污染
date = []
value = []

date_val = {'date' : [],
            'value' : []}

for i in range(0, 25):
    for j in range(0, 12):
        month = str(j+1).zfill(2)
        date_str = f"{year[i]},{month}"  # 统一拼接成字符串
        date_val['date'].append(date_str)
        date_val['value'].append(df.loc[i,j+1])
        date.append(date_str)
        value.append(df.loc[i,j+1])
date_val = pd.DataFrame(date_val)

额外优化:用Pandas内置方法更高效

既然已经有了date_val DataFrame,完全可以不用循环,直接用Pandas的字符串处理和映射功能完成转换,代码更简洁高效:

mon = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
          'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# 创建月份数字到缩写的映射字典
month_map = {str(i+1).zfill(2): mon[i] for i in range(12)}

# 拆分date列,并映射月份
date_val[['year', 'month']] = date_val['date'].str.split(',', expand=True)
date_val['formatted_date'] = date_val['year'] + '-' + date_val['month'].map(month_map)

# 提取结果到列表
new_format = date_val['formatted_date'].tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:35:26