Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在pandas的帮助下创建函数来读取文件夹中的所有文件,并为每个文件创建不同的数据帧?_Python_Python 3.x_Pandas_Function_For Loop - Fatal编程技术网

Python 如何在pandas的帮助下创建函数来读取文件夹中的所有文件,并为每个文件创建不同的数据帧?

Python 如何在pandas的帮助下创建函数来读取文件夹中的所有文件,并为每个文件创建不同的数据帧?,python,python-3.x,pandas,function,for-loop,Python,Python 3.x,Pandas,Function,For Loop,我正在尝试创建一个python函数来帮助完成以下任务 从文件夹中读取.csv文件 使用为每个文件创建不同的数据框(数据框名称应与文件名相同) 创建所有已创建数据框的列表,并将其分配给变量(变量名称为文件夹名称) 下面是我正在尝试的代码: import pandas as pd import os def read_folder(): path = input('Please provide path name to read:') for file in range(100

我正在尝试创建一个python函数来帮助完成以下任务

  • 从文件夹中读取.csv文件
  • 使用为每个文件创建不同的数据框(数据框名称应与文件名相同)
  • 创建所有已创建数据框的列表,并将其分配给变量(变量名称为文件夹名称)
下面是我正在尝试的代码:

import pandas as pd
import os

def read_folder():
    path = input('Please provide path name to read:')
    for file in range(1000):
        if os.path.exists(path + '/' + str(file) + '.csv'):
            file = pd.read_csv(path + '/' + str(file) + '.csv')
            folderpath = (os.path.split(path)[1])
            temp = []
            temp.append(file)
            print(temp)
        else:
            print('No file at given location')
我在这个网站上也尝试过不同的答案,但不知何故,大多数答案都有不同的目标。我正在运行上面的代码,因为它不适合我


我是否遗漏了上面代码中的某些内容?

如果您想保留所有数据帧及其名称,那么首先您应该创建字典而不是列表,其次您应该在
之前为
-loop创建字典。如果您在
中为
循环创建
临时
,那么您会一次又一次地创建它,并删除以前的内容-因此最后只有
临时
中的最后一个数据帧

当你有了字典,你就可以得到它的
来拥有所有的文件名

顺便说一句:最好在函数外部使用
input()
并将path作为参数发送-这样您也可以使用文件中的path或
sys.argv
或硬编码名称来测试它



如果您想保留所有数据帧及其名称,那么首先应该创建字典而不是列表,其次应该在
for
-loop之前创建字典。如果您在
中为
循环创建
临时
,那么您会一次又一次地创建它,并删除以前的内容-因此最后只有
临时
中的最后一个数据帧

当你有了字典,你就可以得到它的
来拥有所有的文件名

顺便说一句:最好在函数外部使用
input()
并将path作为参数发送-这样您也可以使用文件中的path或
sys.argv
或硬编码名称来测试它



“last commands exit对我不起作用”--这意味着什么?整个
变量名应该是这样的…
是无用的。如果您确实需要按名称获取熊猫数据帧,请使用字典以名称存储熊猫数据帧。通常,这是一种考虑不周全的方法的标志,因为您的代码如何从文件中获取名称以用于代码中您的代码的
temp
从不在外部使用,也不会在循环内部被删除/重置为空列表-您可能需要了解一些基本用法。。。。除此之外,您还将
文件
用作整数和pd.read\u csv的结果。。坏的因果报应来自于重复使用这样的变量名。@PatrickArtner,我们不能在外部使用这个临时值,但我仍然得到所有创建的数据帧的列表,对吗?
Temp
最多只能保存一个数据帧。。。如果你不明白为什么,回到最基本的问题上来。@PatrickArtner,我不是想在temp变量中保存多个数据帧,但我只是想在其中列出所有数据帧的名称。“last commands exit对我不起作用”--这意味着什么?整个
变量名称应该是这样的…
是徒劳的。如果您确实需要按名称获取熊猫数据帧,请使用字典以名称存储熊猫数据帧。通常,这是一种考虑不周全的方法的标志,因为您的代码如何从文件中获取名称以用于代码中您的代码的
temp
从不在外部使用,也不会在循环内部被删除/重置为空列表-您可能需要了解一些基本用法。。。。除此之外,您还将
文件
用作整数和pd.read\u csv的结果。。坏的因果报应来自于重复使用这样的变量名。@PatrickArtner,我们不能在外部使用这个临时值,但我仍然得到所有创建的数据帧的列表,对吗?
Temp
最多只能保存一个数据帧。。。如果你不明白为什么,回到最基本的问题上来。@PatrickArtner,我并不是想在temp变量中保存多个数据帧,但我只想列出其中所有数据帧的名称。
import pandas as pd
import os

# --- functions ---

def read_folder(path, min_number=0, max_number=1000):
    
    all_dfs = dict()
    
    for number in range(min_number, max_number):
        
        filename = f'{number}.csv'
        fullpath = os.path.join(path, filename)
        
        if os.path.exists(fullpath):
            all_dfs[filename] = pd.read_csv(fullpath)
        else:
            print('No file at given location')
    
    return all_dfs
            
# --- main ---

all_folders = dict()  # dictionary for all folders and filenames

path = input('Please provide path name to read:')

all_dfs = read_folder(path)
all_filenames = list(all_dfs.keys())

folder = os.path.split(path)[-1]
all_folders[folder] = all_filenames