当前位置:   article > 正文

Python批量提取多个csv文件内指定行数据并汇总在新csv文件内_python抓取csv特定数据生成新文件

python抓取csv特定数据生成新文件

有时候我们需要统计软件分析出来的数据,这些数据保存到了csv文件中,而我们需要对比这些数据差异,就需要一个个的打开csv文件,而后找到数据复制粘贴出来,自己整理对比,而当数据文件比较多的时候,一个个打开复制就会显得比较耗时,那我们可以利用Python脚本来批量处理这些文件,这里我假如有3个csv文件数据:

而我们的目标是提取 ‘mt’这一列第4行到第7行的数据,话不多说,看下怎么操作吧。

这里我们先将脚本放在要处理文件的目录下,这样我们可以获取当前路径直接处理文件了。

首先我们就要获取当前路径,然后遍历路径下的csv文件:

  1. # 获取当前路径
  2. current_path = os.getcwd()
  3. # 获取当前路径下所有CSV文件的文件名
  4. csv_files = [f for f in os.listdir(current_path) if f.endswith('.csv')]

接下来就是对每个csv文件中的数据进行提取操作了,利用pandas存储列表数据,首先我们可以设定一些参数,比如上面所说的列名为 ‘mt’的这一列,以及第4到第7行:

  1. target_column = 'mt'
  2. start_row = 2
  3. end_row = 5
'
运行

利用loc函数进行定位:

  1. for csv_file in csv_files:
  2. df = pd.read_csv(os.path.join(current_path,csv_file),error_bad_lines=False,encoding='utf-8')
  3. # 提取指定列、行范围的数据
  4. extracted_data = df.loc[start_row:end_row, target_column]

当然如果单纯就是第几列的话,这边需要用iloc函数,比如我们提取的是第二列,那么将上述的target_column改为1,这里注意区间是左闭右开,所以ens_row要改为6,不然就会少一行数据:

  1. target_column = 1
  2. start_row = 2
  3. end_row = 6
  4. # 遍历每个CSV文件,提取数据并保存到新的CSV文件中
  5. for csv_file in csv_files:
  6. df = pd.read_csv(os.path.join(current_path, csv_file),error_bad_lines=False,encoding='utf-8')
  7. extracted_data = df.iloc[start_row:end_row, target_column] # 区间是左闭右开

这里其实我们已经完成了提取操作,print一下:

接下来我们需要将这些数据汇总到一个新csv中,并且想让这些数据一行一行输出,也就是转置,如果不想转置也无所谓,看个人需求。

我们先将数据存储到sum_data列表中,然后在写入csv中:

  1. sum_data=[]
  2. # 遍历每个CSV文件,提取数据并保存到新的CSV文件中
  3. for csv_file in csv_files:
  4. df = pd.read_csv(os.path.join(current_path, csv_file),error_bad_lines=False,encoding='utf-8')
  5. # 提取指定列、行范围的数据
  6. extracted_data = df.iloc[start_row:end_row, target_column] # 区间是左闭右开
  7. sum_data.append(extracted_data)
  8. df2 = pd.concat(sum_data,axis=1)
  9. # df3 = pd.pivot(df2)
  10. # 转置
  11. df3 = df2.T
  12. # 保存提取的数据到新的CSV文件中
  13. new_csv_file = 'sum.csv'
  14. df3.to_csv(os.path.join(current_path, new_csv_file), index=True, header = False)

最终结果,这里将列名去掉了,只保留了行名也就是index=True, header = False的作用:

在这过程中遇到pd.read_csv报错,可以参考这篇博客:

利用pandas读取csv文件时遇到UnicodeDecodeError问题以及解决过程-CSDN博客

完整代码附上:

  1. # -*- coding: utf-8 -*-
  2. import os
  3. import pandas as pd
  4. # 获取当前路径
  5. current_path = os.getcwd()
  6. # 获取当前路径下所有CSV文件的文件名
  7. csv_files = [f for f in os.listdir(current_path) if f.endswith('.csv')]
  8. # 指定要提取的列和行范围
  9. # target_column = 'mt' # 假设提取'mt'列
  10. target_column = 1 # 假设提取2列
  11. start_row = 2 # 假设要提取从第3行开始
  12. end_row = 6 # 假设要提取到第6行结束
  13. sum_data=[]
  14. # 遍历每个CSV文件,提取数据并保存到新的CSV文件中
  15. for csv_file in csv_files:
  16. df = pd.read_csv(os.path.join(current_path, csv_file),error_bad_lines=False,encoding='utf-8')
  17. # 提取指定列、行范围的数据
  18. # extracted_data = df.loc[start_row:end_row, target_column]
  19. extracted_data = df.iloc[start_row:end_row, target_column] # 区间是左闭右开
  20. # print(extracted_data)
  21. # 添加数据
  22. sum_data.append(extracted_data)
  23. df2 = pd.concat(sum_data,axis=1)
  24. # df3 = pd.pivot(df2)
  25. df3 = df2.T
  26. # print(df3)
  27. # 保存提取的数据到新的CSV文件中
  28. new_csv_file = 'sum.csv'
  29. df3.to_csv(os.path.join(current_path, new_csv_file), index=True, header = False)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/940668
推荐阅读
相关标签
  

闽ICP备14008679号