Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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 使用numpy getfromtxt从循环中的多个文件导入数据_Python_String_Numpy_Csv - Fatal编程技术网

Python 使用numpy getfromtxt从循环中的多个文件导入数据

Python 使用numpy getfromtxt从循环中的多个文件导入数据,python,string,numpy,csv,Python,String,Numpy,Csv,我有几个文件以年份命名,比如“mcps2007.csv”。我需要每年对所有数据集进行分析,并存储新数据。有一种聪明的方法可以从文件导入并导出到新文件,只改变代码中的年份 与所有感兴趣的量和图形一样,每个变量都存储在一个文件中 np.savetxt("p2008.csv", p, delimiter=",") 首先,我每年运行一次分析,更改所有文件(大约15个文件)的输入和输出年份,每次都在新的数据集上重新运行程序(程序需要一个小时进行分析),但它又长又无

我有几个文件以年份命名,比如“mcps2007.csv”。我需要每年对所有数据集进行分析,并存储新数据。有一种聪明的方法可以从文件导入并导出到新文件,只改变代码中的年份

与所有感兴趣的量和图形一样,每个变量都存储在一个文件中

np.savetxt("p2008.csv", p, delimiter=",")
首先,我每年运行一次分析,更改所有文件(大约15个文件)的输入和输出年份,每次都在新的数据集上重新运行程序(程序需要一个小时进行分析),但它又长又无聊,我需要时刻靠近pc重新运行程序

转眼间,我复制了代码(就像我在下面的示例中所做的那样),并手动更改了我现在可以一次性运行程序的每个变量和每个文件,但是代码很乱,复制和更改的过程很长,很无聊,而且充满了调试问题

代码示例:

import numpy as np
from numpy import genfromtxt
import statsmodels.stats.multitest as multi


p07 = genfromtxt('p2007.csv', delimiter=',')
p08 = genfromtxt('p2008.csv', delimiter=',')
p09 = genfromtxt('p2009.csv', delimiter=',')
p10 = genfromtxt('p2010.csv', delimiter=',')
p11 = genfromtxt('p2011.csv', delimiter=',')
p12 = genfromtxt('p2012.csv', delimiter=',')
p13 = genfromtxt('p2013.csv', delimiter=',')
p14 = genfromtxt('p2014.csv', delimiter=',')
p15 = genfromtxt('p2015.csv', delimiter=',')
p16 = genfromtxt('p2016.csv', delimiter=',')

p07 = p07.flatten()
p08 = p08.flatten()
p09 = p09.flatten()
p10 = p10.flatten()
p11 = p11.flatten()
p12 = p12.flatten()
p13 = p13.flatten()
p14 = p14.flatten()
p15 = p15.flatten()
p16 = p16.flatten()

q07 = multi.multipletests (p07, 1e-5, method='bonferroni')
q08 = multi.multipletests (p08, 1e-5, method='bonferroni')
q09 = multi.multipletests (p09, 1e-5, method='bonferroni')
q10 = multi.multipletests (p10, 1e-5, method='bonferroni')
q11 = multi.multipletests (p11, 1e-5, method='bonferroni')
q12 = multi.multipletests (p12, 1e-5, method='bonferroni')
q13 = multi.multipletests (p13, 1e-5, method='bonferroni')
q14 = multi.multipletests (p14, 1e-5, method='bonferroni')
q15 = multi.multipletests (p15, 1e-5, method='bonferroni')
q16 = multi.multipletests (p16, 1e-5, method='bonferroni')

是否有一种聪明的方法可以在一年中只更改代码中的一次,从而使输入和输出文件的名称相应地更改,此外,还有一种方法可以在我需要分析的10年内循环运行程序,而不必每次都重新运行程序?

一种方法是创建一个函数,然后在循环中运行它,运行时间为您拥有的年数。例如:

data = [] # to store your p07..p16
res = [] # to store your q07..q16

for d in range(07,16+1):
    p = genfromtxt('p20' + str(d) + '.csv', delimiter=',')
    p.flatten()
    q = multi.multipletests (p, 1e-5, method='bonferroni')
    # save objects
    data.append(p)
    res.append(q)
def your_function(file_name):
    data = genfromtxt(file_name, delimiter=',')
    data = data.flatten()
    dt = multi.multipletests(data, 1e-5, method='bonferroni')
    return dt

data = []
for file in files: # You need to define files first
    data.append(your_function(file))

一种方法是创建一个函数,然后在循环中运行它,运行时间为您拥有的年数。例如:

def your_function(file_name):
    data = genfromtxt(file_name, delimiter=',')
    data = data.flatten()
    dt = multi.multipletests(data, 1e-5, method='bonferroni')
    return dt

data = []
for file in files: # You need to define files first
    data.append(your_function(file))

如果我理解的话,我必须像文件名列表一样定义文件。此外,是否可以在python中定义函数的函数?类似于
def your_函数(file_name,另一个_函数):
通过这种方式,我可以在分析的几乎每个步骤中使用这种迭代方式,而无需每次定义一个新函数。您可以使用包glob(import glob)实现这一点。。定义存储csv文件的路径。。然后在循环中写入:对于glob.glob(path+'*.csv')中的文件:如果我理解,我必须定义文件名列表之类的文件。此外,是否可以在python中定义函数的函数?类似于
def your_函数(file_name,另一个_函数):
通过这种方式,我可以在分析的几乎每个步骤中使用这种迭代方式,而无需每次定义一个新函数。您可以使用包glob(import glob)实现这一点。。定义存储csv文件的路径。。然后在循环中写入:对于glob.glob(path+'*.csv')中的文件: