Pandas添加DataFrame字段函数报错:TypeError: string indices must be integers
问题排查与修复
核心错误原因
调用函数时,你把df参数传成了字符串'my_df1',而非实际的DataFrame对象。当函数执行df[df_field_existing_str]时,相当于对字符串'my_df1'用方括号取索引,而字符串仅支持整数索引,因此抛出TypeError: string indices must be integers。
额外逻辑问题
函数内部存在冗余无效操作:
- 每一步都在操作原字段
df_field_existing_str,而非新字段df_field_new,导致前面的replace和strip操作完全失效,直接跳过这些步骤用原字段转日期。 - 第一步将新字段赋值为原字段,后续又覆盖该值,属于无效代码。
修复后的代码
修正后的函数
import pandas as pd def create_new_date_column_in_df_based_on_other_date_string_column(df, df_field_existing_str, df_field_new): # 逐步处理原字段的字符串格式 processed_date = df[df_field_existing_str].str.replace('12:00:00 AM', '') processed_date = processed_date.str.strip() # 将处理后的字符串转为指定格式的日期,赋值给新字段 df[df_field_new] = pd.to_datetime(processed_date).dt.strftime('%m-%d-%Y') # 返回整个DataFrame,更符合“向现有DataFrame添加字段”的需求 return df
正确的调用方式
# 确保my_df1是实际存在的pandas DataFrame对象 create_new_date_column_in_df_based_on_other_date_string_column(df=my_df1, df_field_existing_str='existingfieldname', df_field_new='newfieldname')
说明
- 调用时必须传入实际的DataFrame对象,不能传DataFrame的名称字符串。
- 调整函数内部逻辑,让每一步字符串处理都能作用到最终的日期转换流程中。
- 若仅需要返回新字段的Series,可将返回值改为
df[df_field_new],但返回整个DataFrame更贴合函数设计目的。
内容的提问来源于stack exchange,提问作者J_Py
相关产品推荐
相关产品推荐

