代码之家  ›  专栏  ›  技术社区  ›  twhale

如何打印1 x 50数据帧中唯一的非空单元格?python

  •  1
  • twhale  · 技术社区  · 7 年前

    我有一个脚本,可以生成一行50列的数据帧。每个数据帧的每个单元格都包含一个字符串。但是,除了一个单元格之外,所有这些字符串都不包含任何元素,因此它们看起来是这样的: '' . 因此,每个数据帧看起来如下所示:

        Col 1        Col 2  ...  Col 49        Col 50
    0                            "Here it is."
    

    只有一个单元格可以包含一个完整的句子(在本例中是第49列中的一个),但不知道该句子是什么以及位于哪一列。我只想回那句话。做这件事的简单方法是什么?

    3 回复  |  直到 7 年前
        1
  •  1
  •   9769953    7 年前

    如果改为使用序列,则很容易用非空元素过滤一个单元格:

    import pandas as pd
    
    df = pd.DataFrame({'col1': [""], 'col2': [""], 'col3': [""], 'col4': ["some words"], 'col5': [""]})
    s = df.T[0]
    sentence = s[s != ""]
    

    这将转换数据帧,然后将其转换为一个序列。当然,如果你能在一开始就把数据存储在一个系列中,那会更容易更快。
    或者,正如RafaelC在注释中所暗示的那样:首先避免存储所有空字符串,直接将非空字符串存储在变量中,完全跳过dataframe。

        2
  •  2
  •   piRSquared    7 年前

    使用空字符串是假的这一事实

    df.at[0, df.loc[0].astype(bool).idxmax()]
    
        3
  •  0
  •   Chris H.    7 年前

    这里有一个解决方案。在这种情况下

    import pandas as pd
    
    row = ['' for i in range(50)]
    row[34] = 'Raining somewhere'
    pdf = pd.DataFrame([row])
    

    看起来像

    In [5]: print(pdf)
      0  1  2  3  4  5  6  7  8  9  ... 40 41 42 43 44 45 46 47 48 49
    0                               ...                              
    
    [1 rows x 50 columns]
    

    '' 具有

    pdf[pdf !=''].dropna(axis = 1)
    

    它回来了

                      34
    0  Raining somewhere
    

    pdf[pdf !=''].dropna(axis = 1).values[0][0]
    

    退货

    'Raining somewhere'
    

    这假设数据帧中只有一个这样的字符串。如果你不想使用 pdf != ''

    import numpy as np
    pdf.replace('',np.nan).dropna(axis = 1).values[0][0]