Pandas计算含字符串两列差值 如何跳过行从索引4开始运算
问题解决方法
按你的实际场景选对应方案即可:
方法1:自动兼容非数值单元格,保留全部行
不用手动跳行,直接把两列强制转为数值类型,字符串内容自动识别为空值,不会中断计算,适合需要保留原表所有行的情况:
import pandas df1 = pandas.read_excel("Trial.xlsx") # 转数值时遇到无法转换的字符串直接设为缺失值NaN c_col = pandas.to_numeric(df1["unnamed: 2"], errors="coerce") d_col = pandas.to_numeric(df1["unnamed: 3"], errors="coerce") df1["total"] = c_col - d_col print(df1)
运行后原来C4、D4是字符串的那一行,total列结果为NaN,其余数值行正常输出差值。
方法2:指定行范围计算,跳过无效行
如果你明确要从Excel第5行(对应pandas默认索引4,因为pandas索引从0开始计数,Excel第4行对应索引3)开始算,可以先初始化结果列,再给指定范围的行赋值:
import pandas df1 = pandas.read_excel("Trial.xlsx") df1["total"] = None # 仅对索引4及以后的行计算差值 df1.loc[4:, "total"] = df1.loc[4:, "unnamed: 2"] - df1.loc[4:, "unnamed: 3"] print(df1)
如果要单独跳过某几行,只要修改loc的行筛选条件即可,比如跳过索引3的行可以写df1.loc[df1.index != 3, "total"] = 计算逻辑。
方法3:读文件时直接跳过前面无效行
如果前4行都是和数据无关的说明、杂项内容,可以在读Excel阶段就跳过这些行,从根源上避免字符串干扰:
import pandas # skiprows=4代表跳过前4行,从第5行开始读数据 df1 = pandas.read_excel("Trial.xlsx", skiprows=4) # 如果自动识别的列名不对,可以手动指定列名 # df1 = pandas.read_excel("Trial.xlsx", skiprows=4, names=["列A","列B","unnamed: 2","unnamed: 3"]) df1["total"] = df1["unnamed: 2"] - df1["unnamed: 3"] print(df1)
注意:这个方法读出来的DataFrame不会包含被跳过的前4行,适合前几行完全是冗余内容的场景。
内容的提问来源于stack exchange,提问作者AlvinLLL
相关产品推荐
相关产品推荐

