将 for 循环中的 csv 提取数据帧附加到单个数据帧中

时间:2021-04-10 08:56:05

标签: python pandas dataframe append concatenation

我的任务是在 10 多年的时间里每个月读取 CSV 数据文件,使时间戳时区感知。我为此(年和月)使用了双循环,然后将所有单独的数据帧附加到一个单一的数据帧中。但是,这确实需要一些时间来执行,我想知道是否有更有效的方法来做同样的事情。

station_number = '015590'
start_year = 2003
end_year = 2018
timezones = {'003003': 'Australia/Perth', '015590': 'Australia/Darwin', '023034': 'Australia/Adelaide', '031011': 'Australia/Brisbane', '091148': 'Australia/Tasmania', '048027': 'Australia/NSW', '014015': 'Australia/Darwin', '086282': 'Australia/Melbourne', '032040': 'Australia/Brisbane', '072150': 'Australia/Sydney', '026021': 'Australia/Adelaide', '015135': 'Australia/Darwin', '076031': 'Australia/Melbourne', '039083': 'Australia/Brisbane', '005007': 'Australia/Perth', '012038': 'Australia/Perth', '200284': 'Indian/Cocos', '008315': 'Australia/Perth'}
tz = timezones[station_number]
combined_df = []
for year in range(start_year, end_year+1,1):
    for month in range(1,13,1):
        file_loc = 'C:/Users/PythonCode/DataFiles/BOM/' + station_number + '/' + station_number + '_' + str(year) + '_' + str(month).zfill(2) + '.csv'
        file = pathlib.Path(file_loc)
        if file.exists() and file.is_file():
            df = pd.read_csv(file_loc)
            d = pd.DatetimeIndex(pd.to_datetime(df['datetime'], utc = True))
            d = d.tz_convert(tz)
            df['Datetime'] = d
            cols = list(df.columns.values)
            df = df[[cols[-1]] + [cols[9]]]
            df.rename(columns={'mean-ghi': 'GHI'}, inplace = True)
            combined_df.append(df)         
        else:
            continue
BOM_data = pd.concat(combined_df)
BOM_data

0 个答案:

没有答案
相关问题