如何读取CSV文件最后20行到Pandas DataFrame并计算总行数
解决方案:读取多个CSV的最后20行到Pandas DataFrame
要实现你的需求,关键是高效计算每个CSV的总行数,同时要注意保留表头(避免跳过表头导致列名丢失)。下面分两种场景给出具体实现:
方法1:纯Python实现(跨平台)
这种方法不依赖外部命令,适合所有操作系统。核心思路是先快速统计文件总行数,再根据总行数决定需要跳过的行(注意避开表头)。
步骤:
- 写一个高效的行计数函数:直接遍历文件行,比用Pandas全量读取后再计数快得多,尤其是大文件。
- 对每个CSV文件,判断总行数是否超过20:
- 如果≤20:直接全量读取
- 如果>20:跳过表头之外的前
总行数-20行,保留表头和最后20条数据
代码实现:
import glob import pandas as pd def count_csv_total_lines(file_path): """统计CSV文件的总行数(包括表头)""" with open(file_path, 'r', encoding='utf-8') as f: return sum(1 for line in f) # 遍历所有CSV文件,读取最后20行 log_total = [] for csv_file in glob.glob('./coins/*.csv'): total_lines = count_csv_total_lines(csv_file) if total_lines <= 20: # 文件内容不足20行,直接全读 df = pd.read_csv(csv_file) else: # 跳过表头(索引0)之后的前N行,保留表头和最后20条数据 # 要跳过的行是索引1到total_lines-21,对应range(1, total_lines-20) df = pd.read_csv(csv_file, skiprows=range(1, total_lines - 20)) log_total.append(df) # 可选:将所有DataFrame合并为一个 combined_df = pd.concat(log_total, ignore_index=True)
方法2:用系统命令加速(Linux/macOS/WSL)
如果你的运行环境支持tail命令(类Unix系统),可以直接用它读取文件最后20行,无需统计总行数,速度更快(尤其超大型文件)。
步骤:
- 先读取CSV的表头
- 用
tail -n 20读取文件最后20行 - 如果表头不在这20行里,就把表头和读取到的内容合并,再用Pandas解析
代码实现:
import glob import pandas as pd import subprocess from io import StringIO def read_csv_last_n_lines(file_path, n=20): """读取CSV文件的最后n行(保留表头)""" # 读取表头 with open(file_path, 'r', encoding='utf-8') as f: header = f.readline().strip() # 用tail命令读取最后n行 result = subprocess.run( ['tail', '-n', str(n), file_path], capture_output=True, text=True, encoding='utf-8' ) last_lines = result.stdout # 如果表头不在最后n行中,手动添加表头 if not last_lines.startswith(header): last_lines = f"{header}\n{last_lines}" # 用StringIO将字符串转为可读取的文件对象 return pd.read_csv(StringIO(last_lines)) # 遍历文件并收集结果 log_total = [read_csv_last_n_lines(f) for f in glob.glob('./coins/*.csv')] combined_df = pd.concat(log_total, ignore_index=True)
关键细节说明:
- 表头处理:两种方法都特意保留了CSV的表头,避免DataFrame出现列名错误的问题。
- 边界情况:当文件总行数≤20时,直接全量读取,不会丢失任何数据。
- 性能差异:方法2用系统命令直接读取文件末尾,比纯Python遍历行计数更快,适合处理超大CSV文件;方法1跨平台性更好,无需依赖外部命令。
内容的提问来源于stack exchange,提问作者coding404
相关产品推荐
相关产品推荐

