我有一个如下所示的电子表格:
我的目标是打印出哪个“ hmi”控制哪个“ az”,在其对应的列中用“ x”表示。基于上述电子表格的示例:等。
我可以使用并排序到输出excel工作表的我的想法输出是(其中“ X”是对应的数字):
HMIX | AZX
ive使用pd.read_excel导入了电子表格,我想使用以下代码对其进行格式化,但是我认为我接近但走错了路径:
for index, row in dfConfig.iterrows():
if row["az1"] != "NaN":
print(row["hmi_number"])
答案 0 :(得分:3)
给出df,
df = pd.DataFrame({'hmi_number':np.arange(1,10),
'az1':['x']+[np.nan]*8,
'az2':[np.nan]+['x']+[np.nan]*7,
'az3':[np.nan]*2+['x']*2+[np.nan]*5,
'az4':[np.nan]*4+['x']*2+[np.nan]*3,
'az5':[np.nan]*6+['x']*2+[np.nan],
'az6':[np.nan]*8+['x']})
尝试一下:
for hmi, az in (df.set_index('hmi_number')=='x').dot(df.columns[1:]).iteritems():
print(f'HMI{hmi} controls {az}')
输出:
HMI1 controls az1
HMI2 controls az2
HMI3 controls az3
HMI4 controls az3
HMI5 controls az4
HMI6 controls az4
HMI7 controls az5
HMI8 controls az5
HMI9 controls az6
答案 1 :(得分:1)
首先对行进行遍历,对列进行遍历,如果找到x
,则打印行和列。
for i, row in dfConfig.iterrows():
for col in dfConfig:
if row[col] == 'x':
print(f'HMI{row["hmi_number"]} controls {col}')
答案 2 :(得分:1)
如果您正在寻找可以检查某些东西是否为字符串的东西,请尝试
>>> currentColumn = "x"
>>> isinstance(currentColumn, str)
True
>>> isinstance(currentColumn, int)
False
>>>
答案 3 :(得分:1)
另一种方法基于stack()
方法,然后通过列表理解访问索引。鉴于以上数据框df
:
[print(f"HMI{x} controls {y}") for x,y in df.set_index("hmi_number").stack().index]
解决方案既快速又紧凑。