熊猫用部分通配符读取csv文件

时间:2018-04-18 11:36:35

标签: python pandas

我试图编写一个导入文件的脚本,然后对该文件执行某些操作并将结果输出到另一个文件中。

df = pd.read_csv('somefile2018.csv')

以上代码完美无缺。但是,我想避免在代码中硬编码文件名。

该脚本将在包含script.py和几个csv文件的文件夹(目录)中运行。

我尝试过以下方法:

somefile_path = glob.glob('somefile*.csv')

df = pd.read_csv(somefile_path)

但是我收到以下错误:

ValueError: Invalid file path or buffer object type: <class 'list'>

4 个答案:

答案 0 :(得分:5)

glob返回一个列表,而不是字符串。 read_csv函数将字符串作为查找文件的输入。试试这个:

for f in glob('somefile*.csv'):
    df = pd.read_csv(f)
    ...
    # the rest of your script

答案 1 :(得分:3)

您可以在脚本中获取CSV文件列表并循环显示它们。

from os import listdir
from os.path import isfile, join
mypath = os.getcwd()

csvfiles = [f for f in listdir(mypath) if isfile(join(mypath, f)) if '.csv' in f]

for f in csvfiles:
    pd.read_csv(f)
# the rest of your script

答案 2 :(得分:1)

循环遍历每个文件并构建DataFrame列表,然后使用concat将它们组合在一起。

答案 3 :(得分:0)

要读取遵循特定模式的所有文件,只要它们共享相同的架构,请使用以下功能:

import glob
import pandas as pd

def pd_read_pattern(pattern):
    files = glob.glob(pattern)

    df = pd.DataFrame()
    for f in files:
        df = df.append(pd.read_csv(f))

    return df.reset_index(drop=True)

df = pd_read_pattern('somefile*.csv')

这将适用于绝对路径或相对路径。