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

如何打印1 x 50数据帧中唯一的非空单元格?python,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个脚本,它生成一行50列的数据帧。每个数据帧的每个单元格都包含一个字符串。但是,除了一个单元格之外,所有这些字符串都不包含任何元素,因此它们看起来是这样的:'。因此,每个数据帧看起来如下所示: Col 1 Col 2 ... Col 49 Col 50 0 "Here it is." 只有一个单元格可能包含完整的句子(在本例中为第49列中的一个),但不知道句子是什么以及它位于哪一列。我只想返回那

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

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

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

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

import pandas as pd

df = pd.DataFrame({'col1': [""], 'col2': [""], 'col3': [""], 'col4': ["some words"], 'col5': [""]})
s = df.T[0]
sentence = s[s != ""]
这将转换数据帧,然后将其转换为序列。当然,如果您首先可以将数据存储在一个系列中,则会更容易、更快。

或者,正如RafaelC在一条注释中所暗示的那样:首先避免存储所有空字符串,并将非空字符串直接存储在变量中,完全跳过数据帧。

请使用空字符串为假的事实

df.at[0, df.loc[0].astype(bool).idxmax()]

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

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]

你知道之前的句子吗?不,我事先不知道。对于只有一行的数据帧,一个系列似乎更合适。然后,选择一个非空字符串的元素也应该更容易。该脚本是大型脚本的一部分,必须与数据帧一起工作。首先,我认为您应该调查一下为什么会出现这样的数据帧。在我看来,问题似乎出在这之前的步骤上。