我有一个很长的字符串列表。这些字符串是我想从数据框中保留的那些列。但是,此列表中有几个字符串与列标题不匹配,而是匹配我想要执行的两个或多个列标题之间的操作。
例子:
df = @A @B @C @D @E @F
1 2 3 4 5 6
9 8 7 6 5 4
1 3 5 7 9 11
list = ["@A", "@C", "@D / @F"]
我希望这样输出:
@A @C @D/@F
1 3 0.667
9 7 1.5
1 5 0.63
但是,我终其一生都无法弄清楚该怎么做。为了让事情变得更复杂,有时在我的列表中您可能会看到像我的示例中那样的简单除法,有时您可能会看到更复杂的像"(C + D) / (A + F)"
. 我该怎么做??
老实说,我不知道从哪里开始。我以为我可以做一些类似 df[list] 的事情,pandas 会“知道”该做什么,但我想我可能问得有点太多了!
任何帮助,将不胜感激!谢谢。
编辑:在尝试使用 eval() 方法后,我遇到了另一个问题。我不认为这可能是一个问题,但是我的大多数字符串都以字符“@”开头,当传递给 eval 函数时会抛出错误。我会在谷歌上搜索如何解决这个问题,但也欢迎任何其他帮助。
编辑2:
我想出了一个解决@ 问题的方法。我只是使用了 replace() 方法。
lst = [word.replace("@", "") for word in lst]
然后,我也对我的所有列执行相同的操作。
注意:永远不要list
用作列表名,它是 Python 中的保留字。我把它改成lst
lst = ["A", "C", "D / F"]
df = pd.DataFrame(df.eval(lst).T, columns=lst)
输出
A C D / F
0 1 3 0.666667
1 9 7 1.5
2 1 5 0.636364
如果我们lst
用更复杂的计算来扩展你的,这个方法仍然成立:
lst = ["A", "C", "D / F", "(C + D) / (A + F)"]
df = pd.DataFrame(df.eval(lst).T, columns=lst)
输出
A C D / F (C + D) / (A + F)
0 1 3 0.666667 1
1 9 7 1.5 1
2 1 5 0.636364 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句