Python 从dataframe中删除行,直到找到实际的列名
我正在熊猫数据框中阅读电子邮件中的表格数据。 无法保证列名将包含在第一行中。有时数据的格式如下。 将始终存在的列名有[ID、名称和年份]。有时可能会有其他列,如“年龄” 有时,列名会按预期出现在第一行中Python 从dataframe中删除行,直到找到实际的列名,python,pandas,Python,Pandas,我正在熊猫数据框中阅读电子邮件中的表格数据。 无法保证列名将包含在第一行中。有时数据的格式如下。 将始终存在的列名有[ID、名称和年份]。有时可能会有其他列,如“年龄” 有时,列名会按预期出现在第一行中 ID Name Year 1 John Sophomore 2 Lisa Junior 3 Ed Senior 从电子邮件中读取HTML表后,如何删除不包含列名的初始行?[“ID”、“Name”、
ID Name Year
1 John Sophomore
2 Lisa Junior
3 Ed Senior
从电子邮件中读取HTML表后,如何删除不包含列名的初始行?[“ID”、“Name”、“Year”]
因此,在第一种情况下,我需要删除dataframe中的前2行(包括列行),在第二种情况下,我不需要删除任何内容
此外,列名可以是任意序列,也可以是可变的。但这3列将始终存在[“ID”、“名称”、“年份”]
如果我执行以下操作,则仅当数据帧仅包含3列[“ID”、“Name”、“Year”]
只要行包含这3列[“ID”、“Name”、“Year”]中的任何一列,我就应该能够获取相应的列索引
我怎样才能做到这一点?
我试过了
但是我得到了错误您可以堆叠数据帧并使用
isin
查找标题行
#make sure your read method has pd.read..(headers=None)
def find_columns(dataframe,cols) -> list:
stack_df = dataframe.stack()
header_row = stack_df[stack_df.isin(cols)].index.get_level_values(0)[0]
return header_row
IIUC,一个小功能可以工作。(就我个人而言,我会将此更改为传入您的文件I/O读取方法,并返回从该标题行开始的数据帧
#make sure your read method has pd.read..(headers=None)
def find_columns(dataframe,cols) -> list:
stack_df = dataframe.stack()
header_row = stack_df[stack_df.isin(cols)].index.get_level_values(0)[0]
return header_row
col_index = df.index[(["ID","Name","Year"] in df).any(1)].item()
#make sure your read method has pd.read..(headers=None)
def find_columns(dataframe,cols) -> list:
stack_df = dataframe.stack()
header_row = stack_df[stack_df.isin(cols)].index.get_level_values(0)[0]
return header_row
header_row = find_columns(df,["Age", "Year", "ID", "Name"])
new_df = pd.read_csv(file,skiprows=header_row)
ID Name Year Age
0 1 John Sophomore 20
1 2 Lisa Junior 21
2 3 Ed Senior 22