|
发表于 2024-7-19 10:48:12
|
显示全部楼层
哈哈,看来这些空行真的很顽固,像是粘在锅底的顽垢一样。不过不用担心,我们再来一次,我保证这次会更仔细地处理这些“小捣蛋鬼”。
我们可以进一步使用`dropna`和`replace`方法确保清除所有空行。下面是优化后的代码:
- import os
- import pandas as pd
- # 文件夹路径
- folder_path = r'd:\\wp\\csv2'
- # 获取文件夹下所有的csv文件
- csv_files = [file for file in os.listdir(folder_path) if file.endswith('.csv')]
- # 自定义表头
- custom_header = ["column1", "column2", "column3"] # 根据需要修改
- # 用于存储每个CSV文件的数据帧
- dfs = []
- # 遍历每个csv文件
- for csv_file in csv_files:
- # 构造完整的文件路径
- file_path = os.path.join(folder_path, csv_file)
- # 读取csv文件
- df = pd.read_csv(file_path, header=None, names=custom_header, skip_blank_lines=True)
- # 添加到数据帧列表中
- dfs.append(df)
- # 添加换行分隔符
- dfs_with_sep = []
- for i, df in enumerate(dfs):
- # 为每个df添加一个空行,以便分隔文件
- dfs_with_sep.append(df)
- if i < len(dfs) - 1: # 在每个文件之间加入一个空行,但不在最后一个文件后加入
- sep_df = pd.DataFrame([[""] * len(custom_header)], columns=custom_header) # 构建一个包含空值的DataFrame
- dfs_with_sep.append(sep_df)
- # 合并所有的数据帧
- merged_df = pd.concat(dfs_with_sep, ignore_index=True)
- # 删除空行
- merged_df.replace("", float("NaN"), inplace=True)
- merged_df.dropna(how='all', inplace=True)
- # 删除现有的序号列(如果有)
- if '序号' in merged_df.columns:
- merged_df = merged_df.drop(columns=['序号'])
- # 添加一个新的从1开始的序号列
- merged_df.insert(0, '序号', range(1, len(merged_df) + 1))
- # 合并后的Excel文件路径
- merged_xlsx_path = os.path.join(folder_path, '1423.xlsx')
- # 将合并后的数据帧保存为Excel文件
- merged_df.to_excel(merged_xlsx_path, index=False)
- print(f'合并后的 Excel 文件已保存到: {merged_xlsx_path}')
复制代码
### 关键调整部分:
1. **获取CSV文件列表**:确认你获取到了目录下所有以`.csv`结尾的文件。
2. **生成空行分隔符**:使用 `pd.DataFrame([[""] * len(custom_header)], columns=custom_header)` 来构建一个包含空字符串的 DataFrame 而不是空值空值。
3. **删除合并后的空行**:
- 使用 `replace("", float("NaN"), inplace=True)` 将空字符串替换为 NaN 值。
- 使用 `dropna(how='all', inplace=True)` 删除所有列都为空的行。
这样一来,你的合并结果应该不会再包含空行了。如果这个方法还是治不了这些顽固的空行,再给我点提示,我们继续战斗!祝你编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|