【问题标题】:how open folder with multiple dataframes in python and merge into one csv file如何在python中打开具有多个数据框的文件夹并合并到一个csv文件中
【发布时间】:2019-10-03 22:31:35
【问题描述】:

如何在一个csv文件中合并多个df python来打开文件夹

我有大约 700 个 csv 文件都有完全相同的列,我需要将所有文件合并到一个 csv 文件中。

那是数据,都在一个文件夹里,文件名有一个模式,就像“日期” = ex: 07 25 2018

07252018 = {name: "Carlos", age:"30", height: "15" }

name     age   height
Carlos   30    15



07262018 = {name: "Carlos", age:"30", height: "15" }

name     age   height
Carlos   30    15



and etc.. range of 700csv

我做了什么..

  • 它可以工作,但是非常手动,需要大量输入,因为有 700 个 csv 文件

03012018 = pd.read_csv("Data/03012018 )
03022018 = pd.read_csv("Data/03012018 )
03032018 = pd.read_csv("Data/03012018 )
03042018 = pd.read_csv("Data/03012018 )
03052018 = pd.read_csv("Data/03012018 )
and etc..



file = pd.cancat([03012018,03022018,03032018,03042018,03052018 ])

file.to_csv("Data/file")


预期输出将是一种最佳方式,无需大量输入即可快速完成。

【问题讨论】:

  • 该文件夹中是否有一些您不需要的csv 文件?即你会在你的文件夹中附加所有的csv吗?
  • 是的,文件夹中的所有 csv 文件

标签: python pandas numpy concat


【解决方案1】:

IIUC,应该这样做:

选项 1:

效率较低,可读性更好:

def get_df():
    df=pd.DataFrame()
    for file in os.listdir():
        if file.endswith('.csv'):
            aux=pd.read_csv(file)
            df=df.append(aux)
    return df

然后:

df=get_df()

选项 2:

内存效率更高,可读性更低:

def df_generator():

    for file in os.listdir():
        if file.endswith('.csv'):
            aux=pd.read_csv(file)
            yield aux

然后:

generator=df_generator()
df = pd.DataFrame()
for table in generator:
    df = df.append(table)

注意:要按原样工作,脚本必须位于包含 csv 的文件夹内。否则,您需要从脚本所在的文件夹中添加该文件夹的相对路径。

示例:如果您的脚本位于“Project”文件夹中,并且在该文件夹中,您的文件夹“Tables”中包含所有 csv,您可以这样做:

os.listdir('Tables/')

【讨论】:

  • ,谢谢,我把文件夹的路径放在哪里。您会在示例中添加假路径吗?
  • 如果脚本在文件夹中,它将起作用。如果脚本是您的 csv 文件夹上方的一个文件夹,我将添加一个示例
  • 生成器中df=pd.DataFrame() 的用途是什么?为什么生成器版本更“高效”?时间是否证实了这一点?
  • 使用numpy 数组,将它们收集在一个列表中并在最后应用一次np.concatenate 会更有效。列表追加比重复np.append 快。我想知道 pd.concatdf.append 是否同样适用?
  • numpy 效率更高。如果数据帧很大并且存在内存限制,则使用生成器的内存效率更高。也许我应该更好地解释自己。生成器中的 df=pd.DataFrame() 是选项 1 的剩余代码,我会修复它。谢谢@hpaulj
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 2021-09-15
  • 2021-11-26
相关资源
最近更新 更多