本文目录导读:

我来介绍几种批量填充CSV空值的方法:
使用Python(最通用)
基本用法
import pandas as pd
import numpy as np
# 读取CSV文件
df = pd.read_csv('input.csv')
# 方法1:填充所有空值为特定值
df.fillna('未知', inplace=True) # 填充为字符串
df.fillna(0, inplace=True) # 填充为数字
df.fillna('无数据', inplace=True)
# 方法2:按列填充不同值
fill_values = {
'姓名': '未知姓名',
'年龄': 0,
'城市': '未知城市',
'收入': 0.0
}
df.fillna(value=fill_values, inplace=True)
# 方法3:使用统计值填充
df['年龄'].fillna(df['年龄'].mean(), inplace=True) # 平均值
df['收入'].fillna(df['收入'].median(), inplace=True) # 中位数
df['城市'].fillna(df['城市'].mode()[0], inplace=True) # 众数(出现最多的值)
# 方法4:向前/向后填充
df.fillna(method='ffill', inplace=True) # 用前面的值填充
df.fillna(method='bfill', inplace=True) # 用后面的值填充
# 保存结果
df.to_csv('output.csv', index=False)
完整脚本示例
import pandas as pd
import sys
import os
def fill_csv_empty(input_file, output_file, fill_strategy='null'):
"""
批量填充CSV空值
:param input_file: 输入CSV文件路径
:param output_file: 输出CSV文件路径
:param fill_strategy: 填充策略
"""
try:
# 读取CSV
df = pd.read_csv(input_file, encoding='utf-8')
print(f"原始数据量: {len(df)} 行")
print(f"空值统计:\n{df.isnull().sum()}")
if fill_strategy == 'null':
# 填充为NULL字符串
df.fillna('NULL', inplace=True)
elif fill_strategy == 'zero':
# 数字列填充0,文本列填充''
for col in df.columns:
if df[col].dtype in ['int64', 'float64']:
df[col].fillna(0, inplace=True)
else:
df[col].fillna('', inplace=True)
elif fill_strategy == 'mean':
# 数字列用平均值,文本列用众数
for col in df.columns:
if df[col].dtype in ['int64', 'float64']:
df[col].fillna(df[col].mean(), inplace=True)
else:
df[col].fillna(df[col].mode()[0] if len(df[col].mode()) > 0 else '', inplace=True)
elif fill_strategy == 'ffill':
# 向前填充
df.fillna(method='ffill', inplace=True)
else:
# 默认填充为'未知'
df.fillna('未知', inplace=True)
# 保存结果
df.to_csv(output_file, index=False, encoding='utf-8')
print(f"处理完成,已保存到: {output_file}")
print(f"处理后空值统计:\n{df.isnull().sum()}")
except Exception as e:
print(f"处理出错: {e}")
# 使用示例
if __name__ == "__main__":
fill_csv_empty('input.csv', 'output.csv', fill_strategy='zero')
使用命令行工具(Linux/Mac)
使用awk
# 将所有空值替换为 "NA"
awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++) if($i=="") $i="NA"} 1' input.csv > output.csv
# 将特定列的空值替换
awk -F, 'BEGIN{OFS=","} {if($3=="") $3="0"; if($5=="") $5="unknown"} 1' input.csv > output.csv
使用sed
# 替换所有空字段为 "NULL" sed 's/,,/,NULL,/g; s/,$/,NULL/g; s/^,/NULL,/g' input.csv > output.csv # 重复执行直到没有空值 sed -i ':a; s/,,/,NULL,/g; ta' input.csv
使用PowerShell(Windows)
# 读取CSV并填充空值
$csvContent = Import-Csv "input.csv"
$csvContent | ForEach-Object {
$_.PSObject.Properties | ForEach-Object {
if ([string]::IsNullOrEmpty($_.Value)) {
$_.Value = "N/A"
}
}
$_
} | Export-Csv "output.csv" -NoTypeInformation
批量处理多个CSV文件
import pandas as pd
import glob
import os
def batch_fill_csv(folder_path, output_folder, fill_strategy='null'):
"""
批量处理文件夹中所有CSV文件
"""
# 创建输出文件夹
os.makedirs(output_folder, exist_ok=True)
# 获取所有CSV文件
csv_files = glob.glob(os.path.join(folder_path, '*.csv'))
for file_path in csv_files:
try:
# 读取文件
df = pd.read_csv(file_path, encoding='utf-8')
# 填充空值
df.fillna('无数据', inplace=True)
# 保存到输出文件夹
filename = os.path.basename(file_path)
output_path = os.path.join(output_folder, filename)
df.to_csv(output_path, index=False, encoding='utf-8')
print(f"处理完成: {filename}")
except Exception as e:
print(f"处理失败 {file_path}: {e}")
# 使用
batch_fill_csv('./input_folder/', './output_folder/')
交互式脚本(带参数)
import pandas as pd
import argparse
def main():
parser = argparse.ArgumentParser(description='批量填充CSV空值')
parser.add_argument('input', help='输入CSV文件路径')
parser.add_argument('-o', '--output', default='output.csv', help='输出文件路径')
parser.add_argument('-f', '--fill', default='null',
choices=['null', 'zero', 'mean', 'ffill', 'bfill'],
help='填充策略')
parser.add_argument('-v', '--value', help='自定义填充值')
args = parser.parse_args()
# 读取CSV
df = pd.read_csv(args.input)
if args.value:
df.fillna(args.value, inplace=True)
elif args.fill == 'null':
df.fillna('NULL', inplace=True)
elif args.fill == 'zero':
df.fillna(0, inplace=True)
elif args.fill == 'mean':
numeric_cols = df.select_dtypes(include=['number']).columns
for col in numeric_cols:
df[col].fillna(df[col].mean(), inplace=True)
# 保存
df.to_csv(args.output, index=False)
print(f"处理完成,输出: {args.output}")
if __name__ == "__main__":
main()
使用方式:
python script.py input.csv -o output.csv -f zero python script.py input.csv --value "NA"
建议
- 备份原始数据:处理前先备份原始CSV文件
- 选择合适策略:根据数据类型选择填充方式
- 大数据处理:如果文件很大,考虑分块读取
- 编码问题:注意文件编码(UTF-8/GBK)
选择适合你需求的脚本即可,最常用的是Python的Pandas库,功能强大且灵活。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播