【问题标题】:merging multiple CSV files in one with same header but different csv files name with python使用python将具有相同标题但不同csv文件名的多个CSV文件合并为一个
【发布时间】:2019-12-10 18:38:39
【问题描述】:

我是 python 新手...我试图应用此代码来合并多个 csv 文件,但它不起作用..基本上,我有一个文件包含带有标题的股票价格:日期、开放、高,low,Close,Adj 收盘量... .但每个 csv 文件都有不同的名称:Apl.csv、VIX.csv、FCHI.csv 等。 我想将所有这些 csv 文件合并到 One.. 但我想添加一个新列,它将披露 csv 文件的名称示例:

stock_id,date,open,High,low,Close,Adj Close Volume with stock_id = apl,Vix 等。 我使用了这段代码,但我卡在第 4 行 这是代码:

  files = os.listdir() 
  file_list = list() 
  for file in os.listdir():
      if file.endswith(".csv")
      df=pd.read_csv(file,sep=";")
      df['filename'] = file
      file_list.append(df) 
  all_days = pd.concat(file_list, axis=0, ignore_index=True) 
  all_days.to_csv("all.csv")

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: python csv


    【解决方案1】:

    在 Python 中,缩进级别很重要,您需要在 if 语句的末尾加一个冒号。我不能说你正在尝试的方法,但你可以用这个清理语法:

    files = os.listdir() 
    file_list = list() 
    for file in os.listdir():
        if file.endswith(".csv"):
            df=pd.read_csv(file,sep=";")
            df['filename'] = file
            file_list.append(df) 
    all_days = pd.concat(file_list, axis=0, ignore_index=True) 
    all_days.to_csv("all.csv")
    

    【讨论】:

    • 嗨谢谢 sjc..但我不认为错误来自缩进..如果 file.endswith(".csv"):, 我在这一行出现错误不确定该方法是否适合我想做的事情
    • 我的主要问题是:如何在单个文件中创建列并放置每个 csv 文件的名称,以及日期时间序列
    • 对,在您发布的代码中,您在 if 语句末尾缺少冒号。它在我发布的 sn-p 中。
    • 嗨,sjc,我使用了您的代码,但仍然出现错误...显然该代码无法获取每个 csv 文件名并将其存储在列中。请有什么想法吗?
    • 嗨,sjc 未对齐。未来版本的 pandas 将默认更改为不排序。要接受未来的行为,请传递 'sort=False'。要保留当前行为并使警告静音,请传递 'sort=True'。 # 在加载内容时从 sys.path 中删除 CWD。​​span>
    【解决方案2】:

    我在 python 方面相对较新..这是我想做的..我有一个包含多个 csv 文件的文件夹(2018.csv、2017.csv、2016.csv 等)500 个 csv 文件准确地说..每个 csv 包含标题“日期”、“代码”、“Cur”、价格等。我想将所有 500 个 csv 文件连接到一个数据名中……这是我的一个 csv 文件的代码,但是它非常慢,我想对所有 500 个文件执行此操作并在一个数据帧中连接:

     DB_2017 = pd.read_csv("C:/folder/2018.dat",sep=",", header =None).iloc[: 0,4,5,6]
    
     DB_2017.columns =["date","Code","Cur",Price]
    
     DB_2017['Code'] =DB_2017['Code'].map(lambdax:x.lstrip('@').rstrip('@'))
    
     DB_2017['Cur'] =DB_2017['Cur'].map(lambdax:x.lstrip('@').rstrip('@'))
    
     DB_2017['date'] =DB_2017['date'].apply(lambdax:pd.timestamp(str(x)[:10)
    
     DB_2017['Price'] =pd.to_numeric(DB_2017.Price.replace(',',';')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-15
      • 2021-12-17
      • 2019-07-18
      • 2017-12-01
      • 2013-04-15
      • 2019-08-28
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多