You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中压缩含空值的数据集以减少列数?

解决方案

针对你需要将每行非空值向左对齐、减少列数的需求,用Python的Pandas可以快速实现,以下是具体步骤和代码:

核心思路

保留sha列作为唯一标识,对其余列的每一行提取非空值,将这些值依次填充到前列,空位置留空(或NaN),最终列数等于所有行中非空值的最大数量。

代码实现(Pandas版)

import pandas as pd

# 读取你的数据集(如果是Excel用pd.read_excel)
df = pd.read_csv("your_dataset.csv")

# 分离标识列和数据列
sha_column = df[["sha"]]
data_columns = df.drop("sha", axis=1)

# 对每行处理:过滤空值后重新生成Series,自动向左对齐
processed_data = data_columns.apply(lambda row: pd.Series(row.dropna().values), axis=1)

# 合并标识列和处理后的数据
final_df = pd.concat([sha_column, processed_data], axis=1)

# 给新列命名(你不在意列名的话可以随便命名)
final_df.columns = ["sha"] + [f"col_{i}" for i in range(final_df.shape[1]-1)]

# 查看结果或保存
print(final_df)
# final_df.to_csv("processed_dataset.csv", index=False)

优化版(针对大数据集)

如果你的数据集行数很多,apply方法效率较低,可以用Numpy提升速度:

import pandas as pd
import numpy as np

df = pd.read_csv("your_dataset.csv")
sha_column = df[["sha"]]
data_array = df.drop("sha", axis=1).values

# 根据空值类型生成掩码:如果空值是空字符串用`!= ''`,如果是NaN用`pd.notna()`
mask = data_array != ''

processed_rows = []
for row in data_array:
    # 提取当前行的非空值
    non_empty_vals = row[mask[row]]
    # 补全到原列数长度(空位置填默认值)
    padded_row = np.pad(non_empty_vals, (0, mask.shape[1] - len(non_empty_vals)), mode='constant', constant_values='')
    processed_rows.append(padded_row)

# 转换为DataFrame并合并
processed_data = pd.DataFrame(processed_rows)
final_df = pd.concat([sha_column, processed_data], axis=1)
final_df.columns = ["sha"] + [f"col_{i}" for i in range(final_df.shape[1]-1)]

内容的提问来源于stack exchange,提问作者Giammaria GIORDANO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:40:29