首页 > 解决方案 > 如何使用循环来调整路径名

问题描述

我正在开发一个分析大量 csv 文件的程序。目前我正在手动声明每个项目,但正如您在我的代码中看到的那样,我实际上只是在我的路径和变量名中 +1。我想我可以用一个循环来简化它,只是不知道如何用路径名来做到这一点。

我的代码:

import pandas as pd
import numpy as np 

### declation ###
df_primes1 = pd.DataFrame()
df_primes1 = np.array(df_primes1)
df_search1 = pd.DataFrame()

df_primes2 = pd.DataFrame()
df_primes2 = np.array(df_primes2)
df_search2 = pd.DataFrame()

df_primes3 = pd.DataFrame()
df_primes3 = np.array(df_primes3)
df_search3 = pd.DataFrame()

searchterm = '322'

### reads csv in numpy array ###
df_primes1 = pd.read_csv('1/1_Primes_32.csv', delimiter=';', header=None, names='1')
df_primes2 = pd.read_csv('1/2_Primes_32.csv', delimiter=';', header=None, names='2')
df_primes3 = pd.read_csv('1/3_Primes_32.csv', delimiter=';', header=None, names='3')

### sorts prime numbers ###
#df_sorted = df_primes1.sort_values(by='n')
#print(df_sorted)


### searches for number with "searchterm" as start value ###
df_search1 = df_primes1[df_primes1['1'].astype(str).str.startswith(searchterm)]['1']
df_search2 = df_primes2[df_primes2['2'].astype(str).str.startswith(searchterm)]['2']
df_search3 = df_primes3[df_primes3['3'].astype(str).str.startswith(searchterm)]['3']


print(df_search1)
print(df_search2)
print(df_search3)

该程序正在运行,我只是想知道如何简化它,因为这样的文件还有 20 多个。

标签: pythonpandasnumpyloopscsv

解决方案


IIUC,我们可以使用 pathlib 和字典理解:

from pathlib import Path

p = 'Path/to/your_csv/'

dfs = {
    f"search_{i}": pd.read_csv(file, delimiter=";", 
                                     header=None, 
                                     names=str(i))
    for i, file in enumerate(Path(p).glob("*Prime*.csv"), 1)
}

分解每个项目,

p是保存 csvs 的目标文件夹

i是一个遍历文件的枚举器,您很可能需要添加一个对 csv 进行排序的前置步骤,以获得您所追求的顺序。

file是从生成器对象返回的每个项目。我们将每个值转换为数据框。

您可以按您的集合过滤每个数据框,即

dfs['search_1']

这将返回一个数据框。


推荐阅读