循环访问列表中的字符串值

Loop over string values from a list

提问人:Serena 提问时间:10/22/2023 最后编辑:Trenton McKinneySerena 更新时间:11/19/2023 访问量:83

问:

我正在尝试使用列表中的字符串值遍历一行代码: (我正在尝试加入我从 pandas 获得的虚拟变量。 get_dummies原始数据帧。 var1、2、3 是虚拟变量)

没有循环:

df.index = var1.index
df = df.join(var1)

df.index = var2.index
df = df.join(var2)

df.index = var3.index
df = df.join(var3)

为了减少冗余编码,我试图将它们放入一个循环中:

dummmies = ['var1', 'var2', 'var3']
for item in dummies:
    df.index = item + '.index'
    df = df.join(item)

这会产生一个错误,指出必须使用某种集合“var1.index”来调用 Index(...)。

你能帮我解决这个问题吗? 我有多个假人要加入,我真的很想让这个循环工作。 谢谢!!

python pandas 字符串 循环

评论

1赞 Kelly Bundy 10/22/2023
为什么使用字符串?
0赞 OCa 10/24/2023
最小的可重复示例。因此,您的代码无法复制。请定义 df 和这些变量的样本。请参阅如何寻求更多指导。
0赞 OCa 10/24/2023
无论是否来自循环内部,像这样的行都会覆盖原始 df 的索引。这有什么意义?请明确说明您想要的输出是什么。df.index = var1.index

答:

0赞 JimOfAllTrades 10/22/2023 #1

如果你不使用字符串,而是使用实际变量,你应该实现你想要的:

dummmies = [var1, var2, var3]
for item in dummies:
    df.index = item.index
    df = df.join(item)

如果你真的希望初始列表是字符串,请查看这个问题,其中包含所有列出的警告。例如,如果变量是全局变量,则可以执行以下操作:

dummmies = ['var1', 'var2', 'var3']
for item_name in dummies:
    item = globals()[item_name]
    df.index = item.index
    df = df.join(item)

评论

0赞 Serena 10/29/2023
工作!!泰斯姆!!
0赞 Ömer Sezer 10/22/2023 #2

“concat”函数可以以最短的方式帮助您:

df = pd.concat([df, var1, var2, var3], axis=1)

示例代码:

import pandas as pd

# sample
data = {
    'Category': ['A', 'B', 'C'],
    'Value': [10, 20, 15]
}
df = pd.DataFrame(data)

# samples
var1 = pd.get_dummies(df['Category'], prefix='var1')
var2 = pd.get_dummies(df['Category'], prefix='var2')
var3 = pd.get_dummies(df['Category'], prefix='var3')

df = pd.concat([df, var1, var2, var3], axis=1)

print(df)

输出:

  Category  Value  var1_A  var1_B  var1_C  var2_A  var2_B  var2_C  var3_A  var3_B  var3_C
0        A     10    True   False   False    True   False   False    True   False   False
1        B     20   False    True   False   False    True   False   False    True   False
2        C     15   False   False    True   False   False    True   False   False    True

评论

1赞 Ömer Sezer 10/24/2023
@Oca我删除了图片,并添加了文字而不是它
0赞 Serena 10/29/2023
工作!!没有循环和更简单的代码行。泰斯姆!!
0赞 Ömer Sezer 10/29/2023
@serena如果你喜欢这个解决方案,如果你投赞成票或接受它,我会很高兴,谢谢。