我有一个循环,我经常收到错误消息。
print(((df1['col1_df'] == 0) & (df1['col2_df'] == True)).sum())
print(((df1['col1_df'] == 0) & (df1['col3_df'] == True)).sum())
print(((df1['col1_df'] == 0) & (df1['col4_df'] == True)).sum())
print(((df1['col1_df'] == 0) & (df1['col5_df'] == True)).sum())
print(((df2['col1_df'] == 0) & (df2['col2_df'] == True)).sum())
print(((df2['col1_df'] == 0) & (df2['col3_df'] == True)).sum())
print(((df2['col1_df'] == 0) & (df2['col4_df'] == True)).sum())
print(((df2['col1_df'] == 0) & (df2['col5_df'] == True)).sum())
我想通过一个函数循环它们。
到目前为止我有:
for i in range (2,5):
col = "col{}_df".format(i)
print(((df['col'] == 0) & (df['col'] == 2)).sum())
如何给 df 编号并让 df 通过 1、2、3、4(如 df1、df2 df3)
答案 0 :(得分:1)
col
是一个变量。 'col'
是一个字符串。拥有 df['col']
并不指代变量 col
。
您的字符串格式有误:col = "col{}_df".format(i)
另外,range(2,5)
会给你 [2,5)
而不是 [2,5]
。它不包括在内。
答案 1 :(得分:0)
您可以使用推导式将整个代码表达为两行:
print(*( ((df1[f'col1_df'] == 0) & (df1[f'col{i}_df'] == True)).sum() for i in range(2,6) ), sep="\n")
print(*( ((df2[f'col1_df'] == 0) & (df2[f'col{i}_df'] == True)).sum() for i in range(2,6) ), sep="\n")
表达式 ((df1[f'col1_df'] == 0) & (df1[f'col{i}_df'] == True)).sum() for i in range(2,6) )
创建一个生成器对象,一一生成 4 个表达式。
*
散布此生成器中的元素并将参数传递给 print
,就像传递逗号分隔的参数列表一样。 end=\n
确保在输出时这些参数中的每一个都由一个新行分隔。