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

2024-04-26 07:55:39 发布

您现在位置: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],而不是字符串,返回错误。你知道吗

有没有办法绕过这个问题?你知道吗


太多了

我已经习惯了在VBA中构建SQL字符串。。。在python中这是一个错误的想法吗?你知道吗


Tags: 字符串命令df编译器排序错误colnan
2条回答

关闭,您需要的是^{},但如果需要使用^{}函数,请添加参数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.nanFalsedocs

str_a = '(col_1 != col_1)'

str_b = ' & '

str_c = '(col_2 != col_2)'

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

print (df.query(str_tot))
   A  col_1  C  col_2  E  F
0  a    NaN  7    NaN  5  a

另一种方法是使用pythoneval。你知道吗

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

相关问题 更多 >