删除DataFrame中首行空行并重新索引列

1 投票
2 回答
56 浏览
提问于 2025-04-14 16:10

我在用Excel接收数据。有时候,数据中会有空白行,数据从某些列开始;有时候则没有空白行,数据直接就能用。

不过,我现在用的这段代码是用来去掉空白行并重新排列列的。

df = pd.read_excel(response.content, index_col=None)
df = df.dropna(how="all").dropna(how="all", axis=1)
headers = df.iloc[0]
new_df = pd.DataFrame(df.values[1:], columns=headers)
print(new_df)

这段代码只在有空白行的时候有效。如果数据没有空白行,它就没法工作。我该怎么动态处理这个问题呢?

示例数据

样本1

样本数据1

结果是

输出

在这里输入图片描述

样本2

在这里输入图片描述

结果是

在这里输入图片描述

在这里输入图片描述

2 个回答

0

示例

这是一个用于复现示例的csv文件样本

,,
,,
col1,col2,col3
1,4,7
2,5,8
3,6,9

代码

import io
txt = ''',,
,,
col1,col2,col3
1,4,7
2,5,8
3,6,9'''

# Extract some columns (like 0, 1) from a file to find all values are NaN.
sample = pd.read_csv(io.StringIO(txt), usecols=[0, 1], header=None)

样本

      0     1
0   NaN   NaN
1   NaN   NaN
2  col1  col2
3     1     4
4     2     5
5     3     6

你可以使用``

获取数据框

n = sample.isna().all(axis=1).cummin().sum()
df = pd.read_csv(io.StringIO(txt), header=n)

df

   col1  col2  col3
0     1     4     7
1     2     5     8
2     3     6     9

我建议在确定需要跳过的行数后重新加载文件,因为这与数据类型有关。你可以先加载一部分列到数据框中,以便确定需要跳过多少行。

上面的代码创建了一个示例CSV文件,供大家练习。总之,你可以使用以下代码:

sample = pd.read_excel('your_file_path', usecols=[0, 1], header=None)
n = sample.isna().all(axis=1).cummin().sum()
df = pd.read_excel('your_file_path', header=n)
2

试试这个,

df = pd.read_excel(response.content, header=None)
df = df.dropna(how="all").dropna(how="all", axis=1)
df = df.reset_index().drop('index', axis=1)
headers = df.iloc[0]
new_df = pd.DataFrame(df.values[1:], columns=headers)
new_df

撰写回答