Pandas 如何迭代文件提取文件名并传递给逻辑
我有一个名为“操作前”的文件夹。 它包含3个CSV文件,名称分别为Pandas 如何迭代文件提取文件名并传递给逻辑,pandas,Pandas,我有一个名为“操作前”的文件夹。 它包含3个CSV文件,名称分别为文件A.CSV,文件B.CSV,文件C.CSV 当前路径:c:/users/在操作之前[文件A.CSV、文件B.CSV、文件c.CSV] 我需要在每个文件中进行数据操作,操作后,我需要用相同的文件名保存在另一个目录中 目标路径:C:/users/after\u manipulation[文件A.CSV、文件B.CSV、文件C.CSV] 当只有一个带有dataframe的文件时,我有逻辑来进行数据操作。当我有多个文件时,如何读取每个
文件A.CSV
,文件B.CSV
,文件C.CSV
当前路径:c:/users/在操作之前
[文件A.CSV、文件B.CSV、文件c.CSV]
我需要在每个文件中进行数据操作,操作后,我需要用相同的文件名保存在另一个目录中
目标路径:C:/users/after\u manipulation
[文件A.CSV、文件B.CSV、文件C.CSV]
当只有一个带有dataframe的文件时,我有逻辑来进行数据操作。当我有多个文件时,如何读取每个文件及其名称并将其传递给我的逻辑
如果有一个文件,我是如何工作的伪代码
import pandas as pd
df = pd.read_csv('c:/users/before_manipulation/file_A.csv')
... do logic/manipulation
df.to_csv('c:/users/after_manipuplation/file_A.csv')
非常感谢您的帮助。假设您有一些适用于一个文件的逻辑,我会将该逻辑放入一个函数中,并在for循环中运行它 你会得到这样的结果:
directory = r'c:/users/before_manipulation'
files = ['file_A.CSV', 'File_B.CSV','File_C.CSV']
for file in files:
somefunction(directory + '/' + file)
如果您需要有关函数的更多信息,我会检查以下内容:您可以使用
os.listdir()
返回目录中包含的文件列表。如果不将变量传递给
,它将返回工作目录列表
使用os.listdir
中的列表,您可以对其进行迭代,将捕获文件名传递给您已经拥有的用于数据操作的函数。然后在“保存到”上,您可以使用捕获的文件名保存到所需的目录中
总之,代码应该是这样的
import os
import pandas as pd
in_dir = r'c:/users/before_manipulation/'
out_dir = r'c:/users/after_manipulation/'
files_to_run = os.listdir(in_dir)
for file in files_to_run:
print('Running {}'.format(in_dir + file))
df = pd.read_csv(in_dir + file)
...do your logic here to return the changed df you want to save
...
df.to_csv(out_dir + file)
为了实现这一点,您需要为目录中的每个文件提供相同的形状文件,并且还需要为每个文件执行相同的逻辑
如果不是这样,您将需要一个字典之类的东西来保存根据文件名需要执行的不同操作,并在适当的时候调用这些操作。使用
pathlib
from pathlib import Path
new_dir = '\\your_path'
files = [file for file in Path(your_dir).glob('*.csv')]
for file in files:
df = pd.read_csv(file)
# .. your logic
df.to_csv(f'{new_dir}\\{file.name}',index=False)
当我使用上面的逻辑:ParserError:error标记化数据时,我得到了一个错误。C错误:第16行预期有5个字段,看到7很高兴它对您有效…请接受它作为答案,这样人们就会知道它对您有效!如何接受这个答案?我没有在页面中找到任何接受按钮?@KalyanT我的答案旁边应该有一个灰色的复选标记。只需选择它,使其从灰色变为绿色。这将表示接受。这里是帮助页面,如果你需要更多信息。