CN-AIR 是一个包含中国空气质量历史数据的开源数据集,覆盖全国主要城市和监测站点的空气质量指标。
.
├── 城市_20140513-20141231/ # 2014年城市数据
├── 城市_20150101-20151231/ # 2015年城市数据
├── 城市_20160101-20161231/ # 2016年城市数据
├── 城市_20170101-20171231/ # 2017年城市数据
├── 城市_20180101-20181231/ # 2018年城市数据
├── 城市_20190101-20191231/ # 2019年城市数据
├── 城市_20200101-20201231/ # 2020年城市数据
├── 城市_20210101-20211231/ # 2021年城市数据
├── 城市_20220101-20221231/ # 2022年城市数据
├── 城市_20230101-20231231/ # 2023年城市数据
├── 城市_20240101-20241231/ # 2024年城市数据
├── 城市_20250101-20251231/ # 2025年城市数据
├── 城市_20260101-20260418/ # 2026年城市数据
├── 站点_20140513-20141231/ # 2014年站点数据
├── 站点_20150101-20151231/ # 2015年站点数据
├── 站点_20160101-20161231/ # 2016年站点数据
├── 站点_20170101-20171231/ # 2017年站点数据
├── 站点_20180101-20181231/ # 2018年站点数据
├── 站点_20190101-20191231/ # 2019年站点数据
├── 站点_20200101-20201231/ # 2020年站点数据
├── 站点_20210101-20211231/ # 2021年站点数据
├── 站点_20220101-20221231/ # 2022年站点数据
├── 站点_20230101-20231231/ # 2023年站点数据
├── 站点_20240101-20241231/ # 2024年站点数据
├── 站点_20250101-20251231/ # 2025年站点数据
├── 站点_20260101-20260418/ # 2026年站点数据
├── .gitignore # Git忽略文件
├── .gitattributes # Git LFS配置
└── README.md # 项目说明如果未安装 Git LFS(Large File Storage),请先执行:
git lfs installgit clone https://atomgit.com/GewisLab/CN-AIR.git
cd CN-AIRpip install pandas pyarrowimport pandas as pd
# 读取单文件
df = pd.read_csv('城市_20240101-20241231/城市_20240101-20241231/china_cities_20240101.csv')
# 读取合并后的Parquet(如果有)
df = pd.read_parquet('china_cities_combined.parquet')CSV文件格式:
date,hour,type,北京,天津,石家庄,...
20240101,0,AQI,54,57,85,...
20240101,0,PM2.5,21,25,42,...
20240101,0,PM10,47,52,78,...
...字段说明:
date:日期(YYYYMMDD格式)hour:小时(0-23)type:数据类型(AQI、PM2.5、PM10、SO2、NO2、O3、CO)import pandas as pd
# 读取数据
df = pd.read_csv('城市_20240101-20241231/城市_20240101-20241231/china_cities_20240101.csv')
# 转换为长格式
df_long = df.melt(
id_vars=['date', 'hour', 'type'],
var_name='city',
value_name='value'
)
print(df_long.head())import pandas as pd
import glob
# 读取所有城市数据文件
files = glob.glob('城市_*/城市_*/*.csv')
dfs = []
for file in files:
try:
df = pd.read_csv(file)
dfs.append(df)
except Exception:
pass
# 合并所有数据
combined = pd.concat(dfs, ignore_index=True)
# 保存为Parquet
combined.to_parquet('china_cities_combined.parquet', engine='pyarrow', compression='snappy')本项目采用 MIT 许可证。
数据仅供研究和参考使用,请勿用于商业用途。数据可能存在缺失或误差,使用时请自行验证。