如果行包含字符串,则将Python pandas添加到表

时间:2020-02-17 16:42:45

标签: python excel pandas

我有一个如下所示的电子表格:

enter image description here

我的目标是打印出哪个“ hmi”控制哪个“ az”,在其对应的列中用“ x”表示。基于上述电子表格的示例:

  • HMI1控制AZ1
  • HMI2控制AZ2
  • HMI3控制AZ3
  • HMI4控制AZ3

等。

我可以使用并排序到输出excel工作表的我的想法输出是(其中“ X”是对应的数字):

HMIX | AZX

ive使用pd.read_excel导入了电子表格,我想使用以下代码对其进行格式化,但是我认为我接近但走错了路径:

    for index, row in dfConfig.iterrows():
        if row["az1"] != "NaN":
            print(row["hmi_number"])

4 个答案:

答案 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]

解决方案既快速又紧凑。