【发布时间】:2020-11-14 07:52:24
【问题描述】:
我正在开发一个分析大量 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 多个。
【问题讨论】:
-
你知道 Python 中标准库中的路径模块吗?即
pathlib和os你可以通过一个简单的glob调用来获取所有路径 -from pathlib import Path;Path(your_path).glob('*Primes*.csv')或类似的东西;是一个换行符,这里返回一个生成器,你可以用@987654327 把它变成一个列表@ -
感谢您的快速答复。如何区分每个 csv 文件写入另一个数据帧?
-
您是否要读取所有文件并将每个文件存储在不同的数据框中并搜索特定列,例如您读取文件
1/3_Primes_32.csv,而不是要在第 3 列中搜索字符串并打印它。是对吗? -
我想将每个文件写入不同的数据框中。之后,我想对所有数据帧进行相同的分析(例如搜索以 322 开头的数字)并打印每个数据帧的输出。输出如下所示:
33 3223402517 74 3229416881 129 3227514877
标签: python pandas numpy loops csv