【问题标题】:Make a dataframe column with names of variables in the for loop在 for 循环中创建一个包含变量名称的数据框列
【发布时间】:2021-09-01 17:36:24
【问题描述】:

我的代码有问题。下面是sn-p的代码:

abc = [1, 2, 3, 4]
def = [5, 6, 7, 8]

for i in [abc, def]:
   df[str(i)] = i   #This is giving an issue

我想在我的数据框中创建 abc 和 def(列出)一个列,列名为 abc 和 def(与 for 循环中的相同。

有没有可能。有人可以帮忙吗

【问题讨论】:

  • 不清楚你在问什么。因此,在这种情况下,您有一个名称为列表 df['[1, 2, 3, 4]'] 的数据框列,并且您正在尝试将值 1,2,3,4 分配给该列中的行?
  • 其实列表的名字就是我的列名,里面的值就是列的值。但是当我这样做时.... for i in [abc, def]: df[abc] = abc,它将列名分别分配为 abc 和 def 的值。我只需要列表的名称作为我的列名
  • 我想这样做... df['abc] = [1, 2, 3, 4] 和 df['def] = [5, 6, 7, 8]

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


【解决方案1】:

您可以利用 locals() 函数,该函数的作用类似于 dict 来保存局部变量:

abc = [1, 2, 3, 4]
def1 = [5, 6, 7, 8]     # rename 'def' to 'def1' since 'def' is a Python keyword

df = pd.DataFrame()

for i in ['abc', 'def1']:
   df[i] = locals()[i]   

在这里,locals()['abc'] 将解析为变量名称 abc,其中包含 [1, 2, 3, 4]。因此,实际上它与在 for 循环的第一次迭代中运行以下代码相同:

df['abc] = [1, 2, 3, 4] 

结果:

print(df)

   abc  def1
0    1     5
1    2     6
2    3     7
3    4     8

【讨论】:

  • 非常感谢@SeaBean,你确实是救命稻草
【解决方案2】:

你不能(很容易)用你的变量声明来做到这一点。也许你可以试试:

cols = {'abc': [1, 2, 3, 4], 
        'def': [5, 6, 7, 8]}

out = pd.concat([df, pd.DataFrame(cols)], axis="columns")
>>> out
  xyz  abc  def
0   A    1    5
1   B    2    6
2   C    3    7
3   D    4    8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多