使用pandas从csv文件读取全局参数

osh3o9ms  于 2023-09-29  发布在  其他
关注(0)|答案(1)|浏览(79)

我经常使用python pandas来分析实验室的测量数据。例如,如果我有一些“全局”参数“a = 5.2e-3”和“b = 3.21e-5”,它们对于一系列测量是有效的,其中值y是根据x测量的,但对于另一系列x和y的测量可能不同。问题是我必须在python文件中定义ab,如下所示:

import pandas as pd

a = 5.2e-3
b = 3.21e-5
d = pd.read_csv('mydata.dat')

def func(a,d):
  ##... calculates something from a and d

其中mydata.dat包含

x,y
1,2
3,4
5,6

但是我想在我的数据文件mydata.dat中定义它,类似这样:

## Global parameters
a = 5.2e-3
b = 3.21e-5

## Measurement data
x,y
1,2
3,4
5,6

当然,我可以写我的自定义解析器,但我正在寻找一个开箱即用的解决方案。也许语法可能有点不同,但简短而优雅。人们甚至可以考虑另一个类似于Pandas的图书馆。
那我该怎么做呢?

9udxz4iz

9udxz4iz1#

  • "..也许语法可能有点不同,但简短而优雅。"*

IIUC,你可以尝试使用 builtin 模块configparser

from configparser import ConfigParser

cfg = ConfigParser(allow_no_value=True, default_section=None)
cfg.optionxform = str # case-sensitive keys
cfg.read("mydata.dat")

from io import StringIO
d = pd.read_csv(StringIO("\n".join(cfg["MEASUREMENTS"])))

def fn(d, a):
    return d.mul(float(a))

out = fn(d, cfg["GLOBALS"]["a"]) # or **cfg["GLOBALS"] if `fn` asks for a&b

输出量:

print(out)

        x       y
0  0.0052  0.0104
1  0.0156  0.0208
2  0.0260  0.0312

使用的输入(mydata.dat):

[GLOBALS]
a = 5.2e-3
b = 3.21e-5

[MEASUREMENTS]
x,y
1,2
3,4
5,6

相关问题