You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MOF数据集的.CIF文件转换为Pandas兼容的CSV/XLS格式?

将CCDC MOF的CIF文件转换为Pandas兼容格式(CSV/XLS)

方法一:使用pymatgen

pymatgen是材料科学领域常用工具包,可轻松读取CIF文件并提取结构信息,快速转换为Pandas可处理的格式。

步骤1:安装pymatgen

pip install pymatgen

步骤2:单个CIF文件转换

from pymatgen.core.structure import Structure
import pandas as pd

# 读取目标CIF文件
struct = Structure.from_file("your_mof.cif")

# 提取所需结构信息(可按需扩展字段)
mof_info = {
    "化学式": struct.composition.formula,
    "空间群": struct.get_space_group_info()[0],
    "晶胞参数_a(Å)": struct.lattice.a,
    "晶胞参数_b(Å)": struct.lattice.b,
    "晶胞参数_c(Å)": struct.lattice.c,
    "晶胞体积(ų)": struct.lattice.volume,
    "原子总数": len(struct.sites)
}

# 转换为DataFrame并导出
df = pd.DataFrame([mof_info])
df.to_csv("single_mof_data.csv", index=False)
df.to_excel("single_mof_data.xlsx", index=False)

步骤3:批量处理多个CIF文件

针对大量MOF的CIF文件,用循环批量处理:

import os
from pymatgen.core.structure import Structure
import pandas as pd

# 替换为你的CIF文件夹路径
cif_folder = "path/to/your/cif_directory"
all_mof_records = []

for file_name in os.listdir(cif_folder):
    if file_name.endswith(".cif"):
        try:
            file_path = os.path.join(cif_folder, file_name)
            struct = Structure.from_file(file_path)
            
            # 提取信息
            record = {
                "文件名": file_name,
                "化学式": struct.composition.formula,
                "空间群": struct.get_space_group_info()[0],
                "晶胞参数_a(Å)": struct.lattice.a,
                "晶胞参数_b(Å)": struct.lattice.b,
                "晶胞参数_c(Å)": struct.lattice.c,
                "晶胞体积(ų)": struct.lattice.volume,
                "原子总数": len(struct.sites)
            }
            all_mof_records.append(record)
        except Exception as e:
            print(f"处理{file_name}失败: {str(e)}")

# 导出为CSV/XLS
df = pd.DataFrame(all_mof_records)
df.to_csv("batch_mof_data.csv", index=False)
df.to_excel("batch_mof_data.xlsx", index=False)

方法二:使用matminer

matminer基于pymatgen扩展了更丰富的特征提取工具,适合需要复杂结构特征(如孔隙率、吸附相关参数)的场景。

步骤1:安装matminer

pip install matminer

步骤2:提取特征并导出

from matminer.io.cif import CifParser
from matminer.featurizers.structure import Density, SpacegroupFeatures
import pandas as pd

# 读取CIF文件
parser = CifParser("your_mof.cif")
struct = parser.get_structures()[0]

# 初始化特征提取器
density_feat = Density()
spacegroup_feat = SpacegroupFeatures()

# 提取特征
density = density_feat.featurize(struct)[0]
spacegroup_data = spacegroup_feat.featurize(struct)

# 整理数据
mof_info = {
    "化学式": struct.composition.formula,
    "密度(g/cm³)": density,
    "空间群编号": spacegroup_data[0],
    "空间群符号": spacegroup_data[1],
    "晶胞体积(ų)": struct.lattice.volume
}

# 导出
df = pd.DataFrame([mof_info])
df.to_csv("mof_matminer_data.csv", index=False)

批量处理

批量处理逻辑与pymatgen一致,将单个文件的处理逻辑放入循环即可。

注意事项

  • 部分CCDC的CIF文件可能包含非标准标记,若出现读取错误,可检查文件完整性或跳过报错文件。
  • 可根据储氢研究需求扩展提取的特征,比如利用matminer或poreblazer提取孔隙直径、比表面积等参数。

内容的提问来源于stack exchange,提问作者CountZer0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:05:22