Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何合并多个CSV文件?_Python_Excel_Csv - Fatal编程技术网

Python 如何合并多个CSV文件?

Python 如何合并多个CSV文件?,python,excel,csv,Python,Excel,Csv,我有大约7500个csv,需要合并成一个csv,以便创建一个易于阅读的表。 文件格式如下: 每个文件都以股票的股票代码命名(例如:AA.csv、AAL.csv、AAPL.csv等) 每个文件本身都包含此格式的日期和数字 2018-10-11,1 2018-10-12,3 2018-10-15,2 ... 现在,我想将它们合并到一个单一的csv文件中,其中生成的表的标题中有股票代码的名称,第一列中有日期,后面是数字(显然保持csv格式) 例如: 请注意,有些csv文件是空的,有些文件有不同

我有大约7500个csv,需要合并成一个csv,以便创建一个易于阅读的表。 文件格式如下:

  • 每个文件都以股票的股票代码命名(例如:AA.csv、AAL.csv、AAPL.csv等)

  • 每个文件本身都包含此格式的日期和数字

    2018-10-11,1
    2018-10-12,3
    2018-10-15,2
    ...
    
  • 现在,我想将它们合并到一个单一的csv文件中,其中生成的表的标题中有股票代码的名称,第一列中有日期,后面是数字(显然保持csv格式)

    例如:


    请注意,有些csv文件是空的,有些文件有不同的开始日期,有些文件只是不连续的

    您可以这样做:

    将熊猫作为pd导入
    将numpy作为np导入
    从全局导入全局
    dfs_列表=[]
    对于glob中的csv_文件(“Tickers List/*.csv”):
    股票代码=csv文件。拆分(“.”[0]
    df=pd.read\u csv(csv\u文件,头=None,名称=[“日期”,“数值”])
    如果df.shape[0]>0:
    df[“date”]=pd.to_datetime(df[“date”],格式=“%Y-%m-%d”)
    df[“股票代码”]=股票代码
    dfs_列表。追加(df)
    最终df=pd.concat(dfs\U列表)
    
    使用
    glob('dir/*.csv')
    我们可以在一个文件夹中获取所有csv文件

    在此之后,您将拥有一个数据帧,其外观如下:

    如果要更改格式,可以执行以下操作: (请注意,日期会自动排序,因为它用作索引)

    final_df=pd.pivot_表(final_df,values='num',index='date'],
    列=['stock\u ticker'],fill\u value=np.nan)
    
    您将有一个如下所示的数据帧:

    现在,您可以使用以下命令将此数据帧写入新的csv:

    final_df.to_csv(“merged.csv”)
    
    完整代码
    将熊猫作为pd导入
    将numpy作为np导入
    从全局导入全局
    dfs_列表=[]
    对于glob中的csv_文件(“Tickers List/*.csv”):
    股票代码=csv文件。拆分(“.”[0]
    df=pd.read\u csv(csv\u文件,头=None,名称=[“日期”,“数值”])
    如果df.shape[0]>0:
    df[“date”]=pd.to_datetime(df[“date”],格式=“%Y-%m-%d”)
    df[“股票代码”]=股票代码
    dfs_列表。追加(df)
    最终df=pd.concat(dfs\U列表)
    final_df=pd.pivot_表(final_df,values='num',index='date'],
    列=['stock\u ticker'],fill\u value=np.nan)
    最终文件至csv(“合并的csv”)
    
    由于您有非统一的CSV和一些特定要求:

    • 输出csv的特定格式
    • 一些csv文件是空的
    • 某些csv文件具有不同的开始日期
    • 某些csv文件已中断日期
    我会使用
    csv
    模块执行以下操作:
    [“AA.csv”,“AAL.csv”。]但是我需要选择一个文件夹中的所有文件,因为它们太多了,所以我无法将它们写下来。它们都在同一个文件夹中吗?是的。我需要替换第一部分中的某些内容吗?就像dir路径一样?你需要在glob中更改csvs dir路径。“告诉我如何解决这个编码问题”是很重要的。我们希望您先做一个测试,然后问一个关于您的实现的具体问题。我得到了这个错误:回溯(上次的最新调用):文件“C:\Users\Diego\PycharmProjects\thesis\MERGE.py”,第16行,以r:FileNotFoundError:[Errno 2]的形式打开(csv_文件,'r')没有这样的文件或目录:“A.csv”可能是因为文件名仅为A,AA,没有.csv(但它们是csv)我如何解决?请将
    csv\u dir
    变量值替换为所有csv所在的文件夹!好的,我会编辑代码。试试新版本!相同错误“没有这样的文件或目录:'A.csv'”我编辑了csv目录路径如下:csv_dir=r'C:\Users\Diego\PycharmProjects\thesis\Tickers List“我复制并粘贴了csv文件所在的路径,我知道发生了什么。”。。我编辑了代码!行
    中的路径(csv\u dir+csv\u file,'r')为r:
    需要正确。我添加了一个指纹来检测它!检查最新代码!不,那更糟。现在错误是:回溯(最近一次调用上次):文件“C:\Users\Diego\PycharmProjects\thesis\MERGE.py”,第17行,打开(csv_dir+csv_File,'r')作为r:FileNotFoundError:[Errno 2]没有这样的文件或目录:“C:\\Users\\Diego\\PycharmProjects\\thesis\\Tickers ListA.csv”
    import os,csv
    csv_dir = "C:\\Users\Diego\\PycharmProjects\\thesis\\Tickers List\\"
    csv_out = 'csvout.csv'
    
    all_dates = []
    fin_table = dict()
    
    # iterating over all csv files
    for csv_file in os.listdir(csv_dir):
        if True:
    
            csv_name = csv_file #[:-4] # excluding the ".csv" extension 
            table = dict()
            
            print(csv_dir+csv_file)
            with open(csv_dir+csv_file, 'r') as r:
                csvReader = csv.reader(r)
    
                for i, row in enumerate(csvReader):
                    all_dates.append(row[0])
                    table[row[0]] = row[1]
            fin_table[csv_name] = table
        
    
    # populating the final csv 
    with open(csv_out, 'w+') as w:
        csvWriter = csv.writer(w)
    
        # adding the header
        input_row = ['Dates']
        for stock, table in iter(sorted(fin_table.items())):
            input_row.append(stock)
        csvWriter.writerow(input_row)
    
        # Adding the rest of the table by available date 
        # since, some dates may not have a value, as you said   
        for date in sorted(all_dates): 
            
            # adding the date rows and stock values 1 by 1
            input_row = [date]
            for stock, table in iter(sorted(fin_table.items())):
                # NOVALUE will be put in cells  
                # where a value doesn't exist for a date
                input_row.append(table.get(date, 'NOVALUE')) 
            csvWriter.writerow(input_row)
    
    # ************************** end of program code