如何在Python中将字符串转换为代码?

3

将字符串转换为代码

值得注意的点:

  • 我是编程新手,正在测试各种方法以学习;
  • 也就是说,我确定有更好的方法来实现我所要做的事情;
  • 然而,我希望知道任何替代/更有效的方法;
  • 我仍然想知道如何将字符串转换为代码,以使用这种技术实现我的目标。

到目前为止,我已经在论坛和谷歌上搜索了一些主题,其中包括使用evalexec,但都无法使其在这里工作或精确回答我的问题。

场景

  • 我有一个数据框:london,有23列
  • 我想创建一个数据框,显示所有具有“NaN”值的行
  • 我尝试使用.isnull(),但似乎只能逐个列地工作
  • 我正在尝试通过使用|返回任何列中.isnull()返回True的行来实现我想要的结果

这是一个示例,只涉及两列:

london[(london['Events'].isnull() | london['Max Gust SpeedKm/h'].isnull())]

然而,我需要使用所有23列来实现这个结果,所以我尝试使用一些代码来完成它。
尝试的解决方案:
创建一个包含所有列标题的字符串,例如:london[(london['列标题'].isnull())后跟|和下一列
然后在上面的示例中使用此字符串,即:london[(字符串)]
我已成功使用以下方式创建所需的字符串:
string = []
for i in (london.columns.values):
    string.append("london['" + i + "'].isnull()")
    string.append(" | ")
del string[-1]
final_string = "".join(string)

最后,当我尝试实施最后一步时,我无法想出将这个字符串转换为可用代码的方法。

例如:

now = eval(final_string)
london[now]

导致了如下错误:
NotImplementedError:“Call”节点未实现
谢谢。

你不应该使用 eval 来实现这个目的。你几乎永远不应该使用 eval。无论如何,我设法让一个类似的例子工作了。你使用的是哪个版本的 pandas - juanpa.arrivillaga
2个回答

4

这是选择数据框中带有 NaN 值的 rows 最简单的方法:

df[pd.isnull(df).any(axis=1)]

谢谢你,乔。 - Jake Stokes

1
string = []
for i in (london.columns.values):
    string.append(london[i].isnull())
london[0<sum(string)]

既然你只有1和0,而且你正在寻找至少一个1,那么你可以将1,0添加到你的列表中,然后对它们求和。如果总和大于1,那么你的if语句就会变成1,否则你的if语句就会变成0,因此你可以在此之后进行London index。


嗨ihsancemil - 这个有效!但我不明白为什么。你能为我解释一下代码在做什么吗?也许可以逐行解释一下?在我的脑海中,我将每个“i”视为列标题,然后附加行的行是从数据框中附加空值的行,所以字符串应该是行的字符串??我肯定在某个地方误解了。#新手问题 - Jake Stokes
在第一行,您创建一个空列表,在第二行开始循环,之后将london[i]传递给布尔函数返回0-1,在最后一行,您对这些布尔值求和,因为您想检查是否有任何1在您的情况下,由于使用了“或”符号,所以您将这些布尔值相加,例如,您有1、1、0、0、0、1,那么您的总和是3,0<sum将为true,这意味着1,您将使用londen[1]。另一个例子是0、0、0,那么总和将为0,您的语句将为false,即0,因此您将调用london[0]。 - ihsancemil
我现在明白了。感谢您的解释!多亏了@ihsancemil,我离就业又近了一步。 - Jake Stokes
@JakeStokes 我建议你学习一下 Python 中的 map、filter 和 reduce,如果你想提高算法能力的话。它们几乎可以在你编写的每个程序中使用。 - ihsancemil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接