【问题标题】:Extract dataframe from dictionary by name按名称从字典中提取数据框
【发布时间】:2020-02-03 04:25:32
【问题描述】:

我创建了一个循环,在其中迭代文件夹中的 (csv) 文件,将它们读入数据帧字典并以 csv 文件命名(例如,file1.csv 变为 file1_df)。我对数据做了一些工作并生成新行,然后我尝试将部分数据帧子集到一个新的数据帧(file1_df2)中。我想稍后在字典之外引用这些数据框。

    df_dict = {}
    for file in os.listdir(datadir):  # Loop over the files in that folder (only has CSV files)
        df_name = file[:-4] + '_df'  # Trim off .csv to name the dataframe
        df_dict[df_name] = pd.read_csv(os.path.join(datadir, file))

是否可以按名称引用这些数据框?所以以后我可以打电话给file1_df2而不是df_dict["file1_df2"]

本质上,我在问与here 相同的问题。看起来他也没有得到这个答案,所以我认为这可能是不可能的,但我还没有找到明确表示不是的答案。


我知道这在 SAS 和 Stata 等语言中是可能的,但我从未弄清楚如何在 Python 中做到这一点。在这些语言中,您可以将占位符变量直接插入某事物的名称中。

/* In SAS */
%let param = test1
libname path "C:\User\&param."

proc sql;
create &param._df as 
select * from path.&param.
quit;
/* In Stata */
foreach i in file1 file2 {
    import delimited "`i'.csv", clear
    save "`i'.dta", replace
}

等等。如果这是不可能,我想肯定地知道这一点。谢谢!

【问题讨论】:

标签: python python-3.x pandas dataframe dictionary


【解决方案1】:

缺乏答案很可能是因为没有人能真正说出您为什么要这样做。这个问题似乎源于将 SAS / Stata 工作流应用于没有任何意义的 python。

但是,我认为这可以满足您的要求

import pandas as pd
my_csvs = ["name1.csv", "name2.csv", "name3.csv"]
my_dfs = [pd.read_csv(csv) for csv in my_csvs]
df_dict = {name.replace(".csv", "_df"): df for name, df in zip(my_csvs, my_dfs)}

# access dataframes with (advisable to use this method!)
csv2 = df_dict["name2_df"]

然后,我们可以通过 exec() 调用将这些键添加到我们的名称空间:

# now add them to the namespace
for k in df_dict.keys():
    exec(f"{k} = df_dict['{k}']")
    # or use "{k} = df_dict['{k}']".format(k=k) for python < 3.5?

# Now does this work?
print(name2_df)

这确实有效。但是,任何 IDE 都会标记最后一行,因为您似乎没有声明该变量。

我强烈建议不要使用它。

【讨论】:

  • 我正要发布类似的内容。它的美妙之处在于 Python 只是创建一个引用而不是一个新对象,这很容易使用 csv2 is df_dict['name2_df'] 进行检查。
  • 谢谢,知道可以但不推荐也很有帮助。
猜你喜欢
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
相关资源
最近更新 更多