【Python】处理Dataframe的时候 如果遇到表格第一行是首行居中,怎么能跳过首行,把第一行作为索引行?

我在处理dataframe的时候,总是会遇到这样的表格:

明明是文件的表名,却变成了索引的列名,而真正的列名,却在第1列。

想要其中一项做筛选,因为列名不对,无法筛选上。这就没法对数据做处理。

在这里插入图片描述以下的解决方法,根据用excel导入和非excel导入做了区分:

1. 用Excel读取Dataframe

在处理包含首行居中的表格数据(例如从 Excel 文件读取)时,如果第一行是标题的行(常见的是首行居中的),而第二行才是实际的列名(索引行),例如这样:
在这里插入图片描述

这个时候,可以通过 pandas 的read_excel()来处理这种情况。

具体步骤:

方法:

  1. 读取文件:使用 pandas.read_excel() 或 pandas.read_csv() 读取文件。
  2. 跳过首行:通过参数 skiprows 跳过第一行。 设置列名:将第二行作为列名。

假设你有一个 Excel 文件,第一行是标题行(首行居中),第二行是实际的列名。

import pandas as pd

# 读取 Excel 文件,跳过第一行
file_path = 'your_file.xlsx'  # 替换为你的文件路径
df = pd.read_excel(file_path, skiprows=1)

# 查看结果
print(df)

如果你需要更灵活地处理,例如动态判断哪一行是列名行,可以先读取整个文件,然后手动设置列名。

import pandas as pd

# 读取整个文件
file_path = 'your_file.xlsx'
df = pd.read_excel(file_path)

# 假设第二行是列名
# 将第二行作为列名
df.columns = df.iloc[1]

# 删除第二行(因为它已经被设置为列名)
df = df.drop(df.index[1])

# 重置索引
df = df.reset_index(drop=True)

# 查看结果
print(df)

PS:
注意哦,要确保读取的文件格式(区分 Excel 或 CSV),并根据文件类型选择合适的读取函数(read_excel 或 read_csv)。

2. 单独处理Dataframe

如果已经有一个 DataFrame,不需要从excel导出,

并且需要跳过首行(假设首行是标题行),将第二行作为列名的话,可以参考这个方法:

方法:

  1. 提取第二行作为列名。
  2. 删除原数据中的第二行。
  3. 重置索引。
import pandas as pd

# 示例 DataFrame
data = {
    'A': ['表格标题', '列名1', 'Value1', 'Value2'],
    'B': ['表格标题', '列名2', 'Value3', 'Value4'],
    'C': ['表格标题', '列名3', 'Value5', 'Value6']
}

df = pd.DataFrame(data)
print("原始 DataFrame:")
print(df)#下面是df

这个是data的展示
在这里插入图片描述
原始 DataFrame:

       A      B      C
0  表格标题  表格标题  表格标题
1   列名1   列名2   列名3
2  Value1 Value3 Value5
3  Value2 Value4 Value6

现在对我来说,表格标题不是我的索引行,我需要索引的是列名。
所以现在我需要提取第1行作为列名,然后删除原数据中的第0行(就是表格标题的行),最后要重置索引。

# 提取第二行作为列名
new_columns = df.iloc[1]

# 删除原数据中的第二行
df = df.drop(df.index[1]) #这个index值,视具体情况定,需要调整

# 将提取的列名设置为 DataFrame 的列名
df.columns = new_columns

# 重置索引(可选,如果需要从0开始)
df = df.reset_index(drop=True)

print("处理后的 DataFrame:")
print(df)

结果, 处理后的 DataFrame:


      列名1   列名2   列名3
0   Value1 Value3 Value5
1   Value2 Value4 Value6

PS:重置索引的好处是可以重新对表格排序,方便对后续处理;
我处理的表格因为是要批量操作,如果没有重置索引的话,会因为处理的表格的顺序不同而误删数据。
所以个人认为这一步还是挺有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值