【问题标题】:Using forloops to generate dataframes [closed]使用 for 循环生成数据帧 [关闭]
【发布时间】:2020-12-06 00:03:13
【问题描述】:
df1
           price         date          cost   variance
    0        152.45     2020-01-04     4         3
  ...
price = df1.loc[:, ['price', 'date']].set_index('date').dropna()

price
            price
date    
2020-01-04  152.45

有没有办法针对价格和其他指标快速执行上述操作?我试过了:

metrics = ['price', 'cost', 'variance']
for x in metrics:
        globals().update({x:df1.loc[:, [x, 'date']].set_index('date').dropna()})
NameError: name 'price' is not defined

【问题讨论】:

  • 欢迎来到 SO!如果您有一个可用的矢量化版本,为什么要将其更改为循环?可以分享df1的代表sn-p吗?谢谢。

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


【解决方案1】:

使用引用您的数据框的dict 比创建全局变量要简单得多(无论如何这都是不好的做法)

df1 = pd.read_csv(io.StringIO("""           price         date          cost   variance
    0        152.45     2020-01-04     4         3"""), sep="\s+")

metrics = ['price', 'cost', 'variance']

dfs = {m:df1.loc[:, [m, 'date']].set_index('date').dropna()
 for m in metrics}

for k in dfs.keys():
    print(f"DATAFRAME: {k}\n{dfs[k].to_string()}\n\n")

输出

DATAFRAME: price
             price
date              
2020-01-04  152.45


DATAFRAME: cost
            cost
date            
2020-01-04     4


DATAFRAME: variance
            variance
date                
2020-01-04         3

【讨论】:

  • 这不会生成我可以在其他地方唯一引用的数据框。
  • 生成3个数据框对应metrics的内容。您可以在dfs dict 范围内的任何地方引用
猜你喜欢
  • 2020-08-14
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
相关资源
最近更新 更多