Pandas单行拆分为多行及Year列计算TypeError问题解决
问题解决:TypeError: cannot convert the series to <class 'float'>
错误根源
你调用的math.floor()是Python标准库函数,仅支持单个数值输入,无法直接处理pandas Series这种向量型数据,这就是报错的核心原因。
修改后的代码
# Add column for number of week for each expanded job record row df['Week Count'] = df.groupby(['Id']).cumcount() + 1 # Add column for year for each job record row import numpy as np df['Year'] = np.where( (df['Starting Week period'] + df['Week Count'] - 1) > 52, df['Starting Year'] + np.floor((df['Starting Week period'] + df['Week Count']) / 52).astype(int), df['Starting Year'] ) # Add column for the number of week for the calendar year for each job record row df['Week #'] = np.where( (df['Starting Week period'] + df['Week Count'] - 1) > 52, (df['Starting Week period'] + df['Week Count'] - 53), df['Starting Week period'] + df['Week Count'] - 1 ) # Add leading 0 to the Week # Column df['Week #'] = df['Week #'].astype(str).str.pad(2, side='left', fillchar='0') # Add a column Period which concatenates the Year and Week # columns df['Period'] = df['Year'].astype(str) + "-" + df['Week #'].astype(str)
关键改动说明
- 替换floor函数:用
np.floor()替代math.floor(),numpy的floor是向量化实现,能直接处理整列Series数据,最后用.astype(int)转成整数(年份为整数类型更合理)。 - 修正列名错误:最后一行原代码的
df['Week #']多了一个空格,改成df['Week #'],避免后续出现找不到列的错误。
额外验证建议
确保Starting Year、Starting Week period这两列是数值类型(int或float),如果是字符串格式,先通过df['Starting Year'] = df['Starting Year'].astype(int)转换类型,否则会出现运算错误。
内容的提问来源于stack exchange,提问作者user21126867
相关产品推荐
相关产品推荐

