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

如何从Pandas DataFrame中移除非数值的无关条目

移除Pandas DataFrame中的非数值内容

批量转换+过滤无效行(通用方案)

针对你加载后包含文本内容的DataFrame,最直接的方式是将所有列转换为数值类型(无法转换的内容会被标记为NaN),随后删除包含无效值的行:

import pandas as pd
import os

os.chdir('/pathdirectory/files')
csv_files = [f for f in os.listdir() if f.endswith('.csv')]

dfs = []

for csv in csv_files:
    df = pd.read_csv(csv, header=None)
    df = df.T
    df.columns = ['DC energy', 'AC energy', 'Capacity factor', 'Inverter Loss']
    dfs.append(df)

final_df = pd.concat(dfs, ignore_index=True)

# 核心清洗逻辑
# 遍历所有列,将非数值内容转为NaN
for col in final_df.columns:
    final_df[col] = pd.to_numeric(final_df[col], errors='coerce')

# 删除任何包含NaN的行(即原行存在非数值内容的行)
final_df_cleaned = final_df.dropna(axis=0, how='any')
# 重置索引避免乱序
final_df_cleaned = final_df_cleaned.reset_index(drop=True)

print(final_df_cleaned)

提前跳过CSV中的非数据行(针对性优化)

如果你的CSV文件里固定存在文本注释/重复表头行,可以在读取阶段直接跳过,减少后续清洗工作:
比如已知每个CSV的前2行是无效文本,读取时添加skiprows参数:

df = pd.read_csv(csv, header=None, skiprows=2)

精准判断行有效性(按需选择)

如果需要保留"部分列是数值"的行,可以自定义逻辑判断每行是否符合要求:

def has_valid_numeric(row):
    # 判断该行转换为数值后,有效数值的数量是否符合预期
    return pd.to_numeric(row, errors='coerce').notna().sum() >= 3  # 示例:至少3列是有效数值

final_df_cleaned = final_df[final_df.apply(has_valid_numeric, axis=1)]
final_df_cleaned = final_df_cleaned.reset_index(drop=True)

内容的提问来源于stack exchange,提问作者Joe Baylay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:30:10