【问题标题】:Stackig vertically .csv files with Pandas in Python在 Python 中使用 Pandas 垂直堆叠 .csv 文件
【发布时间】:2020-03-02 21:47:43
【问题描述】:

所以我一直在尝试将 .csv 文件与 Pandas 合并,并尝试创建几个函数来自动化它,但我一直遇到问题。 我的问题是我想在另一个之后堆叠一个.csv(相同的列数和不同的行数),但是我没有获得具有相同列数的更大的csv,而是获得了具有更多列和行的更大的csv(正确的行数,错误的列数(比应该的列数更多))。 我使用的代码是这个:

import os
import pandas as pd

def stackcsv(content_folder):
    global combined_csv
    combined_csv= []
    entries = os.listdir(content_folder)
    for i in entries:
        csv_path = os.path.join(content_folder, i)
        solo_csv = pd.read_csv(csv_path,index_col=None)
        combined_csv.append(solo_csv)
   csv_final = pd.concat(combined_csv,axis = 0,ignore_index=True)
   return csv_final.to_csv("final_data.csv",index = None, header = None)

我有 3.csv 文件,大小为 20000x17,我想将其合并为 60000x17 之一。我想我的错误必须在索引、标题、index_col 等的参数中...... 提前致谢。

【问题讨论】:

  • 文件是否有标题行?
  • 不,没有标题。稍后再添加。

标签: python pandas csv


【解决方案1】:

所以修改代码后,它工作了。首先,正如 Serge Ballesta 所说,有必要对read_csv 说没有标题。最后,使用sort = False,该功能完美运行。这是我使用的最终代码,最终的 .csv 为 719229 行 × 17 列长。感谢大家!

import os
import pandas as pd

def stackcsv(content_folder):
 global combined_csv
    combined_csv= []
    entries = os.listdir(content_folder)
    for i in entries:
        csv_path = os.path.join(content_folder, i)
        solo_csv = pd.read_csv(csv_path,index_col=None,header = None)
        combined_csv.append(solo_csv)
   csv_final = pd.concat(combined_csv,axis = 0,sort = False)
   return csv_final.to_csv("final_data.csv", header = None)

【讨论】:

    【解决方案2】:

    如果文件没有标题,您必须告诉read_csv。如果不这样做,每个文件的第一行将作为标题行读取。因此,DataFrame 具有不同的列名,concat 将添加新列。所以你应该阅读:

    solo_csv = pd.read_csv(csv_path,index_col=None, header=None)
    

    或者,没有理由对它们进行解码,您可以连接顺序文件:

    def stackcsv(content_folder):
        with open("final_data.csv", "w") as fdout
            entries = os.listdir(content_folder)
            for i in entries:
                csv_path = os.path.join(content_folder, i)
                with open(csv_path) as fdin:
                    while True:
                        chunk = fdin.read()
                        if len(chunk) == 0: break
                        fdout.write(chunk)
    

    【讨论】:

      【解决方案3】:

      pandas concat函数中将参数sort添加为False:

       csv_final = pd.concat(combined_csv, axis = 0, ignore_index=True, sort=False)
      

      【讨论】:

      • 如果输入的csv文件没有headers,每个文件的第一行都会丢失...
      猜你喜欢
      • 2022-08-23
      • 2023-02-23
      • 2017-08-26
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2019-08-27
      • 2019-10-10
      • 1970-01-01
      相关资源
      最近更新 更多