求助:使用Pandas统计CSV文件各列空白/填充单元格数量异常
问题分析与解决建议
1. 检查CSV文件的分隔符是否匹配
你代码里指定了sep='|',但实际CSV文件可能用的是逗号(,)、制表符(\t)或其他分隔符。如果分隔符设置错误,pandas会把整行内容当成单列读取,自然只会输出一列的统计结果。
解决方式:
- 手动打开CSV文件,确认实际使用的分隔符
- 修改
pd.read_csv的sep参数,或者让pandas自动检测分隔符:df = pd.read_csv(file_path, header=None, sep=None, engine='python')
2. 处理空字符串类型的空白单元格
你当前用isnull().sum()只能统计标准NaN值,但CSV里的空白单元格可能是空字符串(''),这种情况不会被isnull()识别,会被误判为已填充内容。
解决方式:
- 读取文件时直接将空字符串转为NaN:
df = pd.read_csv(file_path, header=None, sep='|', na_values=['']) - 或者统计时同时覆盖空字符串和NaN的情况:
blank_counts = df.apply(lambda x: x.isin(['', pd.NA]).sum()) filled_counts = df.shape[0] - blank_counts
3. 确认表头设置是否正确
你使用了header=None,如果CSV文件本身包含表头行,这会导致表头被当作第一行数据,可能干扰列数的正确识别。如果文件有表头,可去掉header=None参数,或指定表头所在行号(比如header=0)。
4. 先验证数据读取是否正确
在统计前先查看数据结构,确认列数是否符合预期:
print(df.shape) # 输出行数和列数,检查列数是否正确 print(df.head()) # 查看前几行数据,确认列是否被正确拆分
完整修正示例代码
假设需要自动检测分隔符,且空字符串视为空白:
import pandas as pd file_path = r"C:\Users\andre\OneDrive\Documentos\Farmácia\Python\Cadastro_clientes\cadastro_cli.csv" # 自动检测分隔符,同时将空字符串转为NaN df = pd.read_csv(file_path, header=None, sep=None, engine='python', na_values=['']) # 统计已填充和空白数量 filled_counts = df.count() blank_counts = df.isnull().sum() summary = pd.DataFrame({ 'Filled': filled_counts, 'Blank': blank_counts }) print("\nFilled and Blank Counts:") print(summary)
内容的提问来源于stack exchange,提问作者André
相关产品推荐
相关产品推荐

