使用Python

时间:2019-06-27 16:00:45

标签: python loops csv

我有以下代码,允许我通过输入.csv文件的x,y,z坐标来计算径向分布函数

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仅从单个.csv文件(“ test_1.csv”)获取输入值x,y,z。但是,在同一个文件夹中,我有多个.csv文件(“ test _ *。csv”),我想为其提取x,y,z坐标并将其输入到RDF函数中。我的最终目标是获取g_r数组并为目录中的每个“ test_ * csv”文件指定r,这样我就可以对其进行一些统计(平均值,标准偏差等)。

我能够使用以下代码循环遍历目录中的每个文件:

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 :(得分:0)

您只需要对每个xyz数据应用RDF功能:

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)

答案 1 :(得分:0)

好吧,您在循环中省略了g_r, r, reference_indices = RDF(x, y, z, L, rMax, dr)。假设要在循环终止后 使这些数据可用,则应将这些数据存储在某种收集对象中,例如列表或字典。我可能会使用dict,其中key = {f和value = (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)