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

解决Pandas中TypeError: NoneType与int相加报错及行重复需求问题

问题分析与解决方案

错误原因

  1. 文件读取错误:你用pd.ExcelFile()得到的是文件对象,而非可直接操作的DataFrame,后续通过time.index或time['Pending']访问数据时会出现异常,导致取值返回NoneType,触发+运算的类型错误。
  2. 变量未初始化+逻辑混乱:代码中df未提前创建就直接赋值;同时用列表存储索引的方式极易引发类型混淆,循环逻辑完全不符合行重复的需求。

正确实现方法

Pandas内置了高效的行重复实现方式,完全不需要复杂循环,以下两种方案可靠且高效:

方案一:利用np.repeat生成重复索引

import pandas as pd

# 正确读取Excel为DataFrame
df = pd.read_excel('Block_time_JP1.xlsx')
# 根据Pending列的值重复对应行
result = df.loc[df.index.repeat(df['Pending'])]
# 重置索引(可选,让索引连续)
result = result.reset_index(drop=True)

# 查看结果前几行
print(result.head())

方案二:利用explode方法(逻辑更直观)

import pandas as pd

df = pd.read_excel('Block_time_JP1.xlsx')
# 给每行生成对应次数的列表,再展开成多行
df['temp'] = df['Pending'].apply(lambda x: [x]*x)
result = df.explode('temp').drop('temp', axis=1)
result = result.reset_index(drop=True)

print(result.head())

原代码的错误修正(不推荐,循环效率极低)

如果一定要用循环实现,需先修正基础问题:

import pandas as pd

# 正确读取数据为DataFrame
time_df = pd.read_excel('Block_time_JP1.xlsx')
# 初始化空的结果DataFrame
result_df = pd.DataFrame(columns=time_df.columns)
current_idx = 0

for _, row in time_df.iterrows():
    repeat_num = row['Pending']
    # 重复当前行指定次数并添加到结果
    for _ in range(repeat_num):
        result_df.loc[current_idx] = row
        current_idx += 1

result_df = result_df.reset_index(drop=True)
print(result_df.head())

注意:循环方法仅适合极小数据集,大数据量下强烈推荐前两种内置方法,效率差距可达数倍甚至数十倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:05:22