如何从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
相关产品推荐
相关产品推荐

