【问题标题】:Read multiple csv files starting with a string into separate data frames in python将多个以字符串开头的csv文件读入python中的单独数据帧
【发布时间】:2019-11-21 06:02:37
【问题描述】:

我有大约 500 个以字母“T”开头的“.csv”文件,例如'T50, T51, T52 ..... T550' 并且文件夹中还有一些其他随机名称的其他 ',csv' 文件。我想读取所有以“T”开头的 csv 文件并将它们存储在单独的数据框中:'t50、t51、t52... 等'

我编写的代码只是将这些文件读入数据帧

import glob
import pandas as pd

for file in glob.glob("T*.csv"):
    print (file)

我想为每个数据框使用不同的名称 - 最好是它们自己的文件名。如何在其“for 循环”中实现这一点?

【问题讨论】:

  • 那么你的问题是什么?
  • 你可以像filelist = [file for file in os.listdir(folder) if file.startswith('T')]那样创建一个以'T'开头的文件列表,然后通过循环遍历文件列表将它们加载到pandas。
  • 自动生成变量名显示here!只需将 xrange() 调整为 range(),具体取决于您的版本。

标签: python pandas csv


【解决方案1】:

完全同意@Comos
但是如果你仍然需要单独的变量名,我改编了here的解决方案!

import pandas as pd
import os

folder = '/path/to/my/inputfolder'

filelist = [file for file in os.listdir(folder) if file.startswith('T')]
for file in filelist:
    exec("%s = pd.read_csv('%s')" % (file.split('.')[0], os.path.join(folder,file)))

【讨论】:

  • 感谢 ABotros,如果我想将文件名分配给数据框怎么办?有些文件也只有字母,而大多数文件都有数字。如何提取文件名并将其分配给存储它的数据框?
  • 那么你想要文件名作为数据框的变量名吗? (这就是上面的代码应该做的)或者您希望文件名作为数据框中的列名?你能具体说明你的意思吗?否则,使用@Comos的解决方案
  • 哦,是的,希望文件名作为数据框的变量名。但是我遇到了“NameError”,查了一下我看到的是,这可能是由于“exec”语句。有什么想法吗?
  • 抱歉,里面有一些错误的代码。我现在修复了它,并用我自己的小例子进行了尝试。我忘记将字符串视为实际字符串(pd.read_csv 调用中 %s 周围的 ' ')。我还更改了循环以获得更好的可读性,并根据您的要求调整了命名系统。
  • 这个说,文件不存在,当我打印'filelist'时,它显示所有以T开头的文件的名称。'%'是否为'exec'中的各个表达式分配值陈述? exec("%s = pd.read_csv('%s')" % (file.split('.')[0], file))
【解决方案2】:

除了 ABotros 的回答之外,要读取不同数据帧中的所有文件,我建议将文件添加到字典中,这将允许您在循环中保存具有不同名称的数据帧:

filelist = [file for file in os.listdir(folder) if file.startswith('T')]

database = {}
for file in filelist:
    database[file] = pd.read_csv(file)

【讨论】:

    猜你喜欢
    • 2011-07-16
    • 2019-11-23
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2017-06-03
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多