Python 从dataframe中删除行,直到找到实际的列名

Python 从dataframe中删除行,直到找到实际的列名,python,pandas,Python,Pandas,我正在熊猫数据框中阅读电子邮件中的表格数据。 无法保证列名将包含在第一行中。有时数据采用以下格式。实际列名为[ID、名称和年份] dummy1 dummy2 dummy3 test_column1 test_column2 test_column3 ID Name Year 1 John Sophomore 2 Lisa Junior 3 Ed Senior 有时,列名

我正在熊猫数据框中阅读电子邮件中的表格数据。 无法保证列名将包含在第一行中。有时数据采用以下格式。实际列名为[ID、名称和年份]

dummy1           dummy2     dummy3
test_column1 test_column2 test_column3
ID     Name        Year
1      John        Sophomore
2      Lisa        Junior
3      Ed          Senior
有时,列名会按预期出现在第一行中

ID     Name        Year
1      John        Sophomore
2      Lisa        Junior
3      Ed          Senior
一旦我从电子邮件中读取HTML表,我将如何删除不包含列名的初始行?因此,在第一种情况下,我需要删除数据框中的前2行(包括列行),在第二种情况下,我不必删除任何内容

此外,列名可以是任意序列。 基本上,我想做以下几点

1.check whether once of the column names contains in one of the rows in dataframe
2.Remove the rows above
if "ID" in row:
    remove the above rows

我如何才能做到这一点?

丑陋但有效的快速尝试:

id_name = df.columns[0]
df_clean = df[(df[id_name] == 'ID') | (df[id_name].dtype == 'int64')]

丑陋但有效的快速尝试:

id_name = df.columns[0]
df_clean = df[(df[id_name] == 'ID') | (df[id_name].dtype == 'int64')]

您可以首先获取有效列的
索引
,然后进行相应的筛选和设置

df = pd.read_csv("d.csv",sep='\s+', header=None)

如果您想将
ID
作为索引

df = df.iloc[col_index + 1 :].set_index('ID')
df
    Name       Year
ID
1   John  Sophomore
2   Lisa     Junior
3     Ed     Senior

您可以首先获取有效列的
索引
,然后进行相应的筛选和设置

df = pd.read_csv("d.csv",sep='\s+', header=None)

如果您想将
ID
作为索引

df = df.iloc[col_index + 1 :].set_index('ID')
df
    Name       Year
ID
1   John  Sophomore
2   Lisa     Junior
3     Ed     Senior

原始数据的格式是什么?是HTML吗?纯文本?HTML..我正在读取找到标记的表格。我正在读取列表中的表格,我的代码结构与列表中的df类似:#检查df中哪一行包含列名#删除上面的行#执行其他处理#读取#html接受允许跳过行的头参数。最好先确定行数,然后再读取HTML。你能提供样本数据吗?我可以试着写一个解决方案。原始数据的格式是什么?是HTML吗?纯文本?HTML..我正在读取找到标记的表格。我正在读取列表中的表格,我的代码结构与列表中的df类似:#检查df中哪一行包含列名#删除上面的行#执行其他处理#读取#html接受允许跳过行的头参数。最好先确定行数,然后再读取HTML。你能提供示例数据吗?我可以试着写一个解决方案。谢谢,但它给了我以下错误col_index=df.index[(df=[“ID”,“Name”,“Year”])。all(1)]。item()#get columns index ValueError:无效的广播比较[ID”,“Name”,“Year”]关于块值,我猜可能是您使用的是旧版本的pandas。我在pandas 1.x中尝试过,它正在工作。不管怎么说,您使用的是哪个版本?我使用的是0.25.3,这不是版本问题。我在
0.25.3
中尝试过,它也在那里工作。谢谢..只需再查询一次..数据帧中的列数可以是可变的,但是[“ID”,“Name”,“Name.”年份“]将始终存在..我想查找这3列中的任何一列..在这种情况下,我如何修改上述代码?我三次使用此
df.index[(df=[“ID”,“Name”,“Year”]).any(1)].item()
但它是错误的..我还尝试了
df.index[(“ID”in df)].item()
。但它是错误的谢谢,但它给了我以下错误col\u index=df.index[(df==[“ID”,“Name”,“Year”])。所有(1)]。项()#获取列索引值错误:无效的广播比较[ID”,“Name”,“Year”]使用块值,我猜可能是您使用的是旧版本的pandas。我在pandas 1.x中尝试过,它正在工作。不管怎样,您使用的是哪个版本?我使用的是0.25.3,这不是版本问题。我在
0.25.3
中尝试过,它也在那里工作。谢谢..只需再查询一次..数据帧中的列数可以是可变的,但是[“ID”,“Name”,“年”]将始终存在..我想查找这3列中的任何一列..在这种情况下,我如何修改上面的代码?我三次使用此
df.index[(df=[“ID”,“Name”,“Year”]).any(1)].item()
但它是错误的..我还尝试了
df.index[(“ID”in df)].item()
。但它是错误的