【问题标题】:How do you call a file name defined as list by each name?您如何调用每个名称定义为列表的文件名?
【发布时间】:2020-02-24 10:29:32
【问题描述】:

如何调用每个名称定义为列表的文件名?

*首先,您默认导入csv文件的方法。

def f_read_csv(tgrt_csv):
    trgt_csv_temp = '%s.csv' % (tgrt_csv)
    tgrt_tbl = pd.read_csv("".join([get_csv_path,trgt_csv_temp]))
    return tgrt_tbl

*其次,我尝试使用 for csv 将每个文件的名称带入列表中。

for name in read_csv_list:
    f_read_csv('%s' %name)

如何获取列表中每个csv文件的名称?

【问题讨论】:

  • 您能否提供您的 csv 文件样本以便我们更好地回答?
  • 您需要使用 Pandas 是否有特定原因?

标签: python pandas dataframe


【解决方案1】:

你的意思是通过pandas读取文件名列表,然后转换为数据框,如果所有csv文件格式相同,你可以使用dask.dataframe

import dask.dataframe as dd

ddf = dd.read_csv(f"{get_csv_path}*.csv")
df = ddf.compute()

dask 与 pandas 不兼容。

【讨论】:

    【解决方案2】:

    我经常使用list comprehension 来生成数据帧。

    dfs = [f_read_csv(name) for name in read_csv_list]
    

    并使用pd.concat 连接它们

    df = pd.concat(dfs)
    

    还有更多,使用glob生成文件列表

    files = glob.glob("/path/to/target/files/*.csv")
    

    【讨论】:

      【解决方案3】:

      我已经更改了您的功能,以获取名称,因为我不确定它是否有效,谜题的某些部分丢失了:-)。 但我保持了一些特征,比如要求文件扩展名。 为了使用 os.listdir 我们导入 os 模块。

      import os
      

      我已将路径定义为我的 python 工作目录中的一个文件夹,并在其中存储了 3 个 csv 文件。

      path = 'somedir/'
      

      这是你的新功能:

      def f_read_csv(tgrt_csv):
      
        tgrt_tbl = [] #to store file names
      
          for file in os.listdir(tgrt_csv): #access to the directory
      
            if file.endswith('.csv'): #checking files with .csv extension
              name_file = os.path.join(tgrt_csv, file)
              tgrt_tbl.append(name_file)
      
        return tgrt_tbl
      

      然后调用函数 f_read_csv 并传递路径:

      names = f_read_csv("somedir/")  
      

      输出,如果你打印它:

      ['somedir/file 1.csv', 'somedir/file 2.csv', 'somedir/file 3.csv']
      

      如果您希望它们作为字符串,您可以将它们从列表中删除:

      for name in names:
          print(name)
      
      
      somedir/file 1.csv
      somedir/file 2.csv
      somedir/file 3.csv
      

      【讨论】:

        【解决方案4】:

        我无法理解您的问题。我想您是在问如何将“.csv”附加到列表的元素中。对吗?

        如果是这样,那么你可以使用map()函数来实现它:

        z = list(map(lambda ip:(ip+'.csv'),tgrt_csv)
        

        然后你可以使用pd.read_csv()方法加载内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-03
          • 1970-01-01
          • 2021-11-20
          • 2015-03-16
          • 2015-10-23
          • 1970-01-01
          相关资源
          最近更新 更多