Python 使用多行标题清除原始数据

Python 使用多行标题清除原始数据,python,pandas,Python,Pandas,我需要组织从excel数据库导入的数据,问题是它有一个包含客户信息的多行标题,后面有很多包含付款信息的行。我想从标题中获取数据,创建一个包含合同编号和操作情况的新列(它们都在标题中),并将这些信息放在每个付款行中,这样我就可以轻松地对数据帧进行切片 我曾经使用Excel,我所做的是创建一个公式,在一列中使用IF语句来标识标题中的合同编号,如果找不到则复制上面的单元格。 我的代码在列中标识了一个键字符串,然后从单元格之间预定义的距离获取合同值和状态。您可以在下面的python for循环中看到它

我需要组织从excel数据库导入的数据,问题是它有一个包含客户信息的多行标题,后面有很多包含付款信息的行。我想从标题中获取数据,创建一个包含合同编号和操作情况的新列(它们都在标题中),并将这些信息放在每个付款行中,这样我就可以轻松地对数据帧进行切片

我曾经使用Excel,我所做的是创建一个公式,在一列中使用IF语句来标识标题中的合同编号,如果找不到则复制上面的单元格。 我的代码在列中标识了一个键字符串,然后从单元格之间预定义的距离获取合同值和状态。您可以在下面的python for循环中看到它

python for循环变得太慢,这是我放弃excel的主要原因,所以我希望有一种更快的方法在python中实现它

我还尝试使用.where()函数,但找不到从标题中获取合同和状态信息的正确方法

我使用的for循环是这样的:

report=pd.read\u excel('report\u filename.xls',header=None)
对于范围内的j(report.shape[0]):
如果str(report.loc[j,1])[0:7]=“提取”:
合同=报告loc[j+1,3]
状态=报告位置[j+7,1]
report.loc['contract#',j]=contracto
report.loc['status']=状态
#以下是我使用的代码的最终版本:
report=pd.read\u excel('report\u filename.xls',header=None)
报告['Contract#']=无
报告['Status']=无
对于i,report.iterrows()中的行:
如果str(行[1]).lower().startswith('extract'):
report.at[i,‘Contract#’]=report.at[i+1,3]
report.at[i,‘Status']=report.at[i+7,1]
报告['Contract#']=报告['Contract#'].ffill(axis=0)
报表['Status']=报表['Status'].ffill(axis=0)
报告=报告[报告['Status']!='Inactive']

您能使用pandas.iterrows吗

将熊猫作为pd导入
report=pd.read\u excel('report\u filename.xls',header=None)
newreport=报告
新报告[‘合同#’]=“”
新报告['Status']=''
对于i,report.iterrows()中的行:
如果行[1].lower().startswith('extract'):
newreport.at[i,‘Contract#’]=report.at[i+1,3]
newreport.at[i,‘Status']=report.at[i+7,1]

Ir工作得非常好,谢谢!我需要做一些修改,我将发布它的最终版本