Pandas数据框:在列中获取由“ NaN”分隔的元组组

时间:2019-12-06 20:20:55

标签: python pandas

我是新来的,请帮助我。假设我的df如下

     words
0    peter
1    is
2    a
3    good
4    man
5    NaN
6    i
7    am 
8    hungry
9    NaN

我想要一个在NaN值之前分组在一起的元组列表。输出应该是这样的。

[['peter','is','a','good','man'],['i','am','hungry']]

如何在python中执行此操作?

3 个答案:

答案 0 :(得分:1)

不用担心。这是一种简单的方法:

lst = [list(df.words)[:5], list(df.words)[6:9]]

lst

>>>[['peter', 'is', 'a', 'good', 'man'], ['i', 'am', 'hungry']]

P.S。这些实际上不是元组,它们是列表中的列表。

答案 1 :(得分:1)

您可以尝试以下操作:

g = df.words.isna()
df[~g].groupby(g.cumsum()).words.apply(list).tolist()                                                              
# [['peter', 'is', 'a', 'good', 'man'], ['i', 'am', 'hungry']]

答案 2 :(得分:0)

尝试一下:

df = df[(df.words.fillna(0) != 0) == True] 
a = df.groupby(df.index - np.arange(df.shape[0])).words.apply(list).to_list()

输出:

 [['peter', 'is', 'a', 'good', 'man'], 
['i', 'am', 'hungry']]

对于评论中的第二个问题,请尝试以下操作:

thelist = []
newlist = []
for x,y in df.words.fillna(0).iteritems():
    if y == 0:
       thelist.append(newlist)
       newlist = []
    else:
       newlist.append(y)   
thelist = [x for x in thelist if x != []]