【问题标题】:Save multiple datasets to different variables using a loop使用循环将多个数据集保存到不同的变量
【发布时间】:2021-05-25 07:17:13
【问题描述】:

我必须加载 7 个数据集,并希望将每个数据集中的数据分配给单独的变量。我在下面包含了我的循环。现在,它可以工作,但是当我希望它根据 variable_name 列表中的名称分别输出每个变量时,它会将所有数据集作为 7 个索引加载到 variable_name 中。

dir = '/data/watkinson/Model_and_Inversion_Code/indiv_variables_output/'
file_name = ['mld_field','sp_field','lp_field','tmp_field','pz_field','sz_field','lz_field']
mld,sp,lp,temp,pz,sz,lz = [[],[],[],[],[],[],[]]
variable_name = [mld,sp,lp,temp,pz,sz,lz]
i=0
while i < 7:
     variable_name[i] = np.array(nc.Dataset(dir + file_name[i] + '.nc', 'r').variables[file_name[i]][:, :, :, :],dtype=float)
     i += 1

【问题讨论】:

  • 您有 7 个文件。您希望将每个文件中的数据加载到 df_list = [df1, df2, df3,.... df7] 的列表中,其中每个文件都是一个数据框。我理解正确吗?

标签: python numpy variables while-loop loaddata


【解决方案1】:

假设我们有 3 个文件:

filename: abc.csv:

Name,Age,Sex
Joey,10,M
Kate,12,F
Mike,14,M
Jane,11,F
Abby,12,F

filename: xyz.csv:

City,State
San Francisco,CA
Chicago,IL
Buffalo,NY
Atlanta,GA
Miami,FL

filename:pqr.csv:

Company,Product
Tesla,Model X
Tesla,Model Y
Apple,MacBook Pro
Ford,Mustang

然后你可以给出这样的东西来将所有 3 个文件作为数据框存储到一个列表中。

import pandas as pd
files = ['abc.csv','xyz.csv','pqr.csv']
dfs = []
for f in files:
    dfs.append(pd.read_csv(f))
print (dfs)

这个输出将是:

[   Name  Age Sex
0  Joey   10   M
1  Kate   12   F
2  Mike   14   M
3  Jane   11   F
4  Abby   12   F,             

            City State
0  San Francisco    CA
1        Chicago    IL
2        Buffalo    NY
3        Atlanta    GA
4          Miami    FL,   

  Company      Product
0   Tesla      Model X
1   Tesla      Model Y
2   Apple  MacBook Pro
3    Ford      Mustang]

在您的情况下,您可以只遍历 file_name 而不需要索引值。

file_name = ['mld_field','sp_field','lp_field','tmp_field','pz_field','sz_field','lz_field']

只要给:

for file in file_name:
    variable_name.append(....)

这里你可以在 append 中给出 pd.read_csv(file)。

【讨论】:

    【解决方案2】:

    我相信您正在寻找 enumerate,它将为您提供从 0 开始计数的 i 索引以及您的变量名称。

    带硬索引i

    dir = '/data/watkinson/Model_and_Inversion_Code/indiv_variables_output/'
    file_name = ['mld_field','sp_field','lp_field','tmp_field','pz_field','sz_field','lz_field']
    variable_names = ['mld','sp','lp','temp','pz','sz','lz']
    variable_data = {}
    for i, name in enumerate(variable_names):
        variable_data[name] = np.array(nc.Dataset(dir + file_name[i] + '.nc', 'r').variables[file_name[i]][:, :, :, :],dtype=float)
    

    您可以单独访问每个变量:

    print(variable_data['mld'])
    print(variable_data['sp'])
    ...
    

    无硬索引i

    我尽量避免使用硬索引i。这里我们使用zip来代替枚举:

    dir = '/data/watkinson/Model_and_Inversion_Code/indiv_variables_output/'
    file_name = ['mld_field','sp_field','lp_field','tmp_field','pz_field','sz_field','lz_field']
    variable_names = ['mld','sp','lp','temp','pz','sz','lz']
    variable_data = {}
    for filename, name in zip(file_names, variable_names):
        variable_data[name] = np.array(nc.Dataset(dir + file_name + '.nc', 'r').variables[file_name][:, :, :, :],dtype=float)
    

    【讨论】:

      猜你喜欢
      • 2015-10-10
      • 2021-11-14
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多