首页 > 解决方案 > 如何使用python在循环中处理脚本

问题描述

我想在for循环下执行脚本,最后想使用python追加并连接到数据框。循环内的脚本正在执行,但最后它给出了错误。

当我使用下面的脚本时,它给出了错误:

df = df.apply(test, axis=1)

Error: AttributeError: '2021-01-19' is not a valid function for 'Series' object

使用另一行给出错误:

df = df.apply(row, inplace=True)

TypeError: 'Series' object is not callable

完整代码:

df = pd.read_excel(open(r'data.xlsx', 'rb'), sheet_name='sheet1')

df1 = df.loc[df['flag'] != 'Not feasible'] 
df = df.loc[df['flag'] == 'Not feasible'].copy()

for index, file in df..iterrows():
   # Run your cleaning codes   
   try:
      file['Joining_Date'][index] = pd.to_datetime(file['Joining_Date'], errors='coerce')
      file['Joining_Date'][index] = file['Joining_Date'].dt.strftime('%Y-%m-%d')
   except ValueError:
      file['status'] = ValueError
   try:
      file['age'][index] = file['age'].replace('[^\d.]', '', regex=True).astype(float)
   except ValueError:
      file['status'] = ValueError

   try:
      file[['col4','col5']][index] = file[['col4','col5']].apply(lambda x: x.astype(str).str.replace('\W',''))
   except ValueError:
      file['status'] = ValueError

   try:
      file['Contact'][index] = file['Contact'].replace('[^\d.]', '', regex=True).astype(float)
   except ValueError:
      file['status'] = ValueError

   file['flag'][index] = "feasible"

##Appending the values to dataframe and concat with the Non Executed data

df = df.apply(file, axis=1)

df = pd.concat([df, df1]).sort_index() 

请建议。如何在循环下执行数据并在写回Excel之前与未处理的数据组合。

标签: pythonpandas

解决方案


而不是使用

file['Joining_Date'][index] = ...

或者

file['Contact'][index] = file['Contact'].replace('[^\d.]', '', regex=True).astype(float)

您必须使用index变量按索引更改数据框,因为目前您没有更改数据框,而是临时file变量。

利用

df['column_name'].iloc[index] = ...

所以不是file['Joining_Date'][index] = ...你改变数据框

df['Joining_Date'].iloc[index] = pd.to_datetime(file['Joining_Date'], errors='coerce')

之后只需删除apply()并保留最后一行。

我建议阅读 pandas 的用户指南


推荐阅读