【问题标题】:Python Pandas Read multiple SAS files from a list into separate dataframesPython Pandas 将列表中的多个 SAS 文件读取到单独的数据帧中
【发布时间】:2018-10-19 14:46:51
【问题描述】:

我正在阅读一堆这样的 SAS 文件:

demography = pd.read_sas("demography.sas7bdat", encoding = 'latin-1') adverse_event_ds = pd.read_sas("adverse_event_ds.sas7bdat", encoding = 'latin-1') rpt10344 = pd.read_sas("rpt10344.sas7bdat", encoding = 'latin-1') vaccine_administration = pd.read_sas("vaccine_administration.sas7bdat", encoding = 'latin-1') lab_tests_blood_chemistry_ds = pd.read_sas("lab_tests_blood_chemistry_ds.sas7bdat", encoding = 'latin-1') lab_tests_hematology_ds = pd.read_sas("lab_tests_hematology_ds.sas7bdat", encoding = 'latin-1') lab_tests_miscellaneous_ds = pd.read_sas("lab_tests_miscellaneous_ds.sas7bdat", encoding = 'latin-1') vital_signs = pd.read_sas("vital_signs.sas7bdat", encoding = 'latin-1')

我希望能够用这样的东西替换它:

datasets = ["demography", "adverse_event_ds", "rpt10344", "vaccine_administration", "lab_tests_blood_chemistry_ds", "lab_tests_hematology_ds", "lab_tests_miscellaneous_ds", "vital_signs"]

for dataset in datasets: dataset = pd.read_sas(dataset+".sas7bdat", encoding = 'latin-1')

但是当我做类似的事情时: demography.info()

我得到: NameError: name 'demography' is not defined

幕后发生了什么,我该如何解决?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这是在每次迭代时分配给dataset,而不是创建新变量(例如demographyrpt10344 等)。

    我会使用如下数据集字典:

    dsd = {}
    for dataset in datasets:
        dsd[dataset] = pd.read_sas(dataset+".sas7bdat", encoding = 'latin-1')
    

    或者更pythonic的路线:

    dsd = { d : pd.read_sas(d + ".sas7bdat", encoding = 'latin-1') for d in datasets }
    

    出于herehere 解释的原因,我强烈建议不要分配给单个变量名,但如果您绝对必须使用,则可以使用

    for d in datasets:
        globals()[d] = pd.read_sas(d + ".sas7bdat", encoding = 'latin-1')
    

    【讨论】:

    • 谢谢!这确实有帮助,但我怎样才能将数据框直接分配给名称,而不必做类似dsd["demography"] 之类的事情?
    • 最好将数据框放在像字典一样的容器中:stackoverflow.com/a/6365889/5666087
    • 感谢您提供的链接!这确实有助于解释为什么这是一个坏主意!非常感谢!
    • 没有问题!如果对您有用,请考虑接受我的回答。
    • @tbdees - 我对你的回答打了+1,这算作接受还是我做错了?
    猜你喜欢
    • 2019-11-23
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2019-07-12
    • 2011-07-16
    • 2017-05-11
    • 1970-01-01
    相关资源
    最近更新 更多