02 - 汇总与筛选 Batch¶
batch 是集合级 API。本 Notebook 使用随文档提供的样例展示摘要列,以及筛选返回新 batch 的行为。处理科研数据集时,将样例路径替换为 results/*.log 等 glob。
In [1]:
Copied!
from pathlib import Path
from molop import AutoParser, molopconfig
molopconfig.quiet()
sample_candidates = (
Path("docs/assets/examples/water_mp2.out"),
Path("../../assets/examples/water_mp2.out"),
Path("water_mp2.out"),
)
sample_path = next((path for path in sample_candidates if path.is_file()), None)
if sample_path is None:
raise FileNotFoundError("请将 water_mp2.out 放在 Notebook 同目录,或使用文档中的样例文件。")
batch = AutoParser(sample_path, n_jobs=1)
print("batch 大小:", len(batch))
print("文件:", batch.file_names)
from pathlib import Path
from molop import AutoParser, molopconfig
molopconfig.quiet()
sample_candidates = (
Path("docs/assets/examples/water_mp2.out"),
Path("../../assets/examples/water_mp2.out"),
Path("water_mp2.out"),
)
sample_path = next((path for path in sample_candidates if path.is_file()), None)
if sample_path is None:
raise FileNotFoundError("请将 water_mp2.out 放在 Notebook 同目录,或使用文档中的样例文件。")
batch = AutoParser(sample_path, n_jobs=1)
print("batch 大小:", len(batch))
print("文件:", batch.file_names)
batch 大小: 1 文件: ['water_mp2.out']
完整摘要会增加源文件中实际存在的字段。扁平列名便于写 CSV 和进行普通 DataFrame 操作。
In [2]:
Copied!
import pandas as pd
from IPython.display import display
summary = batch.to_summary_df(
frame=-1,
brief=False,
flatten_columns=True,
)
with pd.option_context("display.max_columns", None, "display.max_rows", None, "display.width", 240):
display(summary)
import pandas as pd
from IPython.display import display
summary = batch.to_summary_df(
frame=-1,
brief=False,
flatten_columns=True,
)
with pd.option_context("display.max_columns", None, "display.max_rows", None, "display.width", 240):
display(summary)
| DiskStorage.FilePath | DiskStorage.FileFormat | General.Charge | General.Multiplicity | General.CanonicalSMILES | General.NumAtoms | General.FrameID | Calc Parameter.Software | Calc Parameter.Version | Calc Parameter.Method | Calc Parameter.BasisSet | Calc Parameter.Functional | Calc Parameter.Keywords | Environment.SolventModel | Environment.Solvent | Status.IsError | Status.IsNormal | Status.IsTS | Status.IsOptimized | Energy.electronic_energy.hartree | Energy.reference_energy.hartree | Energy.mp2_energy.hartree | Energy.total_energy.hartree | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | /home/runner/work/MolOP/MolOP/docs/assets/exam... | .out | 0 | 1 | O | 3 | 0 | ORCA | 6.0.1 | MP2 | sto-3g | MP2 sto-3g | None | None | False | True | False | False | -74.999375 | -74.963574 | -74.999375 | -74.999375 |
状态筛选可以链接,且不会修改原 batch。
In [3]:
Copied!
normal = batch.filter_state("normal")
optimized = normal.filter_state("opt")
transition_states = normal.filter_state("ts")
print({
"parsed": len(batch),
"normal": len(normal),
"optimized": len(optimized),
"transition_states": len(transition_states),
})
print("原 batch 仍包含:", len(batch))
normal = batch.filter_state("normal")
optimized = normal.filter_state("opt")
transition_states = normal.filter_state("ts")
print({
"parsed": len(batch),
"normal": len(normal),
"optimized": len(optimized),
"transition_states": len(transition_states),
})
print("原 batch 仍包含:", len(batch))
{'parsed': 1, 'normal': 1, 'optimized': 0, 'transition_states': 0}
原 batch 仍包含: 1
可以继续使用筛选后的 batch 导出,也可以把摘要写入 CSV。
In [4]:
Copied!
summary.to_csv("summary.csv", index=False)
print("已写入 summary.csv")
summary.to_csv("summary.csv", index=False)
print("已写入 summary.csv")
已写入 summary.csv