Несколько файлов с одинаковой датой, но разными часами в одном и том же кадре данных - PullRequest
1 голос
/ 24 октября 2019

Мне нужно прочитать несколько файлов, которые находятся в разных каталогах, а затем поместить их в один и тот же кадр данных. Я использую CSV-файл для чтения дат.

Имена файлов организованы как hgyymmddhhhhh

гг = год

мм = месяц

дд= день

чччх = час

Дело в том, что на один и тот же день у меня может быть 1, 2 или 3 разных часа:

hg1308250000.nc

hg1308250100.nc

hg1308250200.nc

или

hg1309201100.nc

hg1309201200.nc

или

hg1310281300.nc

Сценарий, который я сделал, читает только один час в день ... Если день имеет 2 или 3 разных часа, он просто игнорирует его. Например, 25 августа он читает только hg1308250200.nc

 df=pd.read_csv('/home/Desktop/dates.csv')
         df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)


       df['year'], df['month'], df['day'] = df['Date'].dt.year.map(" 
        {:02}".format), df['Date'].dt.month.map("{:02}".format), 
        df['Date'].dt.day.map("{:02}".format)

       df['year2']=df['Date'].dt.strftime('%y')


      for p in np.arange(len(df)):
              year=str(df.iloc[p,1])
              month=str(df.iloc[p,2])
              day=str(df.iloc[p,3])
              year2=str(df.iloc[p,4])

              os.chdir('/home/Documents/PhD/Data/'+year+'/DWD/' 
              +month+ '/')       
              for file in glob.glob('hg' +year2+ month+ day +'*.nc'):
                 data1 = Dataset(file, 'r')
                 data1.set_auto_mask(False)
                 hour= str(file[8:12])
          
             errorbc = data1.variables['ErrorBackscatter'][:]
             bc = data1.variables['Backscatter'][:
             alt = data1.variables['Altitude'][:]
                      
             df_final = pd.DataFrame({'bc': bc, 'bc_e': errorbc, 
             'hour':hour}, index=alt)
             df_final = df_final.assign(date=df.iloc[p].Date)

Кто-нибудь знает, как это исправить, чтобы получить все файлы того же дня в кадре данных?

1 Ответ

1 голос
/ 24 октября 2019

Ваш непоследовательный пробел затрудняет чтение кода, но похоже, что последние 6 строк кода находятся вне цикла for, но используют переменные внутри него. В этом случае они будут использовать последние присвоенные значения, которые в соответствии с вашим примером будут «0200» для часа 25 августа.

Чтобы исправить это, сделайте словарь, который вы используете для df_final внутрицикл for и сохраните его в списке, затем выполните окончательную конкатенацию снаружи.

list_of_dataframes = []
for file in glob.glob('hg' +year2+ month+ day +'*.nc'):
    data1 = Dataset(file, 'r')
    data1.set_auto_mask(False)
    hour = file[8:12]

    errorbc = data1.variables['ErrorBackscatter'][:]
    bc = data1.variables['Backscatter'][:]
    alt = data1.variables['Altitude'][:]

    df_temp = pd.DataFrame({'bc': bc, 'bc_e': errorbc, 'hour':hour})
    list_of_dataframes.append(df_temp)

df_final = pd.concat(list_of_dataframes)
df_final.index = alt
df_final = df_final.assign(date=df.iloc[p].Date)    

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...