如何连接/使用字符串在python/pandas中执行命令

如何连接/使用字符串在python/pandas中执行命令,python,string,pandas,concatenation,Python,String,Pandas,Concatenation,我想使用字符串“命令”来自动化一些分析 比如: str_a = 'df.col_1.isna()' str_b = ' & ' str_c = 'df.col_2.isna()' str_tot = str_a + str_b + str_c 然后使用字符串对df中的NaN行进行排序: df.loc[str_tot, :] 最后一个应等于: df.loc[df.col_1.isna() & df.col_2.isna(), :] 但是python编译器

我想使用字符串“命令”来自动化一些分析

比如:

str_a = 'df.col_1.isna()'   
str_b = ' & '    
str_c = 'df.col_2.isna()'    
str_tot = str_a + str_b + str_c
然后使用字符串对df中的NaN行进行排序:

df.loc[str_tot, :]
最后一个应等于:

df.loc[df.col_1.isna() & df.col_2.isna(), :]
但是python编译器将str_tot读取为[list],而不是字符串,返回错误

有没有办法避免这种情况


thx很多

我习惯于在VBA中构建SQL字符串。。。在python中这是一个错误的想法吗?

关闭,您需要的是,但是如果需要使用函数add parameter
engine='python'

df = pd.DataFrame({
        'A':list('abcdef'),
         'col_1':[np.nan,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'col_2':[np.nan,3,5,7,1,np.nan],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

print (df)
   A  col_1  C  col_2  E  F
0  a    NaN  7    NaN  5  a
1  b    5.0  8    3.0  3  a
2  c    4.0  9    5.0  6  a
3  d    5.0  4    7.0  9  b
4  e    5.0  2    1.0  2  b
5  f    4.0  3    NaN  4  b

str_a = 'col_1.isna()'

str_b = ' & '

str_c = 'col_2.isna()'

str_tot = str_a + str_b + str_c
print (str_tot)
col_1.isna() & col_2.isna()

print (df.query(str_tot, engine='python'))
   A  col_1  C  col_2  E  F
0  a    NaN  7    NaN  5  a
另一个想法是使用事实
np.nan==np.nan
False
,:


另一种方法是使用python
eval

str_a = 'df.col_1.isna()'
e = eval(str_a)
print(e)

对于上面的示例:

df = pd.DataFrame({
        'A':list('abcdef'),
         'col_1':[np.nan,5,4,5,5,4],
         'C':[7,8,9,4,2,3],
         'col_2':[np.nan,3,5,7,1,np.nan],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})

print (df)
   A  col_1  C  col_2  E  F
0  a    NaN  7    NaN  5  a
1  b    5.0  8    3.0  3  a
2  c    4.0  9    5.0  6  a
3  d    5.0  4    7.0  9  b
4  e    5.0  2    1.0  2  b
5  f    4.0  3    NaN  4  b
会回来的

0     True
1    False
2    False
3    False
4    False
5    False

请问这种非正统设计的原因是什么?弦从哪里来?它们是由用户键入的、从文件读取的还是其他什么?你可以看一下,但它可能是jobHi DYZ的错误工具,它只是在我的数据分析中建立了一点自动化…我在一边建立字符串,然后我提供了一个小函数。。。你为什么说这是非正统的?什么是“东正教”?太多太多了。这和我想要的很接近。不知道是否有更通用的功能。我的只是一个例子:我想构建一个更复杂的字符串。另外:这适用于查询行,那么列呢?i、 假设我想在某些行上定位一个df(现在我知道怎么做了,thx),将值更改为定义列的单元格。有没有办法“查询”选择列(?df[col_x].query(string)='123'?)THX很多-@BusinessExploration-不容易,你需要什么。也许你可以检查一下,但一般来说,一些单卫星解决方案是可能的,但确实很复杂。。。非常感谢,我认为你指出了正确的方向。我给你提供了一个链接的小视图和概念在那里。。。即使我很惊讶看到这么多信息。使用字符串生成查询在VBA()中是正常的做法。。。我需要学习…@BusinessExploration-ya,每种语言都有点不同我是否应该删除@BusinessExploration?不,请删除,它增加了上下文。eval和exec在搜索解决方案时遇到的东西。。。
0     True
1    False
2    False
3    False
4    False
5    False