删除DataFrame中首行空行并重新索引列
我在用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
结果是
样本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