Цикл функции через несколько файлов .csv в каталоге с использованием Python - PullRequest
0 голосов
/ 27 июня 2019

У меня есть следующий код, который позволяет мне вычислять функцию радиального распределения путем ввода координат x, y, z из файла .csv

import numpy as np
from RDF import RDF
import pandas as pd

# Particle setup
L = 21.1632573        #Cube side lenght
num_particles = 8000  #Number of Particles

# Calculation setup
dr = 0.1

### Parameters ###
particle_radius = 1
rMax = 10

#Import Data
x_data = pd.read_csv("test_1.csv", header=1,usecols=[0]).values
y_data = pd.read_csv("test_1.csv", header=1,usecols=[1]).values
z_data = pd.read_csv("test_1.csv", header=1,usecols=[2]).values

#Obtain float values for x,y,z
x = x_data.ravel() 
y = y_data.ravel()
z = z_data.ravel()


 # Compute pair correlation
g_r, r, reference_indices = RDF(x, y, z, L, rMax, dr)

Сейчас функция RDF принимает только входные данныезначения x, y, z из одного файла .csv («test_1.csv»).Однако в одних и тех же папках у меня есть несколько файлов .csv ("test _ *. Csv), для которых я хотел бы извлечь координаты x, y, z и ввести их в функцию RDF. Моя конечная цель - получить массивы g_rи r для каждого файла "test_ * csv" в каталоге, чтобы я мог затем получить некоторую статистику по ним (среднее значение, стандартное отклонение и т. д.).

Мне удалось использовать следующий код для циклического прогона каждогофайлы в каталоге:

filenames = sorted(glob.glob('test*.csv'))
for f in filenames:
    x_data = pd.read_csv(f, header=None,usecols=[0]).values
    y_data = pd.read_csv(f, header=None,usecols=[1]).values
    z_data = pd.read_csv(f, header=None,usecols=[2]).values
    x = x_data.ravel()
    y = y_data.ravel()
    z = z_data.ravel()

Однако теперь я застрял в том, как зациклить функцию RDF по всем координатам данных и получить разные g_r и r.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

хорошо, вы пропускаете g_r, r, reference_indices = RDF(x, y, z, L, rMax, dr) в вашем цикле. Предполагая, что вы хотите, чтобы эти данные были доступны после окончания цикла, вы должны хранить их в каком-либо объекте коллекции, таком как список или dict. Я бы, вероятно, использовал dict, где ключ = f и значение = (g_r, r)

filenames = sorted(glob.glob('test*.csv'))
output_dict = {}
for f in filenames:
    x_data = pd.read_csv(f, header=None,usecols=[0]).values
    y_data = pd.read_csv(f, header=None,usecols=[1]).values
    z_data = pd.read_csv(f, header=None,usecols=[2]).values
    x = x_data.ravel()
    y = y_data.ravel()
    z = z_data.ravel()
    filenames = sorted(glob.glob('test*.csv'))
    g_r, r, reference_indices = RDF(x, y, z, L, rMax, dr)
    output_dict[f] = (g_r, r)
0 голосов
/ 27 июня 2019

Вам просто нужно применить функцию RDF для каждого из данных xyz:

g_r_list, r_list = [], []
filenames = sorted(glob.glob('test*.csv'))
for f in filenames:
    x_data = pd.read_csv(f, header=None,usecols=[0]).values
    y_data = pd.read_csv(f, header=None,usecols=[1]).values
    z_data = pd.read_csv(f, header=None,usecols=[2]).values
    x = x_data.ravel()
    y = y_data.ravel()
    z = z_data.ravel()
    g_r, r, reference_indices = RDF(x, y, z, L, rMax, dr)
    g_r_list.append(g_r)
    r_list.append(r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...