循环遍历数据框行

时间:2019-06-28 16:37:05

标签: python pandas list

我是python的新手,正在学习使用数据框和列表推导。 我有以下数据框:

df1=pd.DataFrame({'names':[[['Hans Peter'],['Harry Potter']],[['bla bla'],['some string']]]})

现在我想将每个子列表分成单词。 对于一个列表我可以使用

x=[['Hans Peter'],['Harry Potter'],['bla bla'],['some string here']]
res=[]
for list in x:
    res.append(str(list[0]).split())

但是我如何在数据帧上迭代呢?我认为我必须建立一个列表理解,然后使用apply()方法来克服.append吗?但是我不知道该怎么做。 我将为这样的单个列表构建列表理解:

res = [str(list[0]).split for list in x]

但是我得到包含此功能的列表:

[<function str.split(sep=None, maxsplit=-1)>,...]

DataFrame的预期输出为

 0 [['Hans','Peter],['Harry','Potter']]
 1 [['bla','bla'],['some','string']]

2 个答案:

答案 0 :(得分:4)

首先,您需要调用spit函数,因为否则str.split是一个对象:

''.split
<built-in method split of str object at 0x1005a3ab0>

''.split() # call with parentheses
[]

第二,您需要进入names中的子列表。您可以先使用for循环对此进行仿真:

for x in df1.names:
    for a in x:
        print(a)

['Hans Peter']
['Harry Potter']
['bla bla']
['some string']

列表将保持不变,因此您可以使用a.pop()取出字符串,然后对str.split()的结果使用pop()

df1.names = [[a.pop().split() for a in x] for x in df1.names]

df1
                              names
0  [[Hans, Peter], [Harry, Potter]]
1      [[bla, bla], [some, string]]

答案 1 :(得分:0)

您可以定义一个函数,该函数将列表列表中的单词分开,然后在“名称”系列中依次apply

In [211]: df1=pd.DataFrame({'names':[[['Hans Peter'],['Harry Potter']],[['bla bla'],['some string']]]})

In [212]: df1
Out[212]:
                            names
0  [[Hans Peter], [Harry Potter]]
1      [[bla bla], [some string]]

In [236]: def extractor(x):
     ...:     l = []
     ...:     for i in x:
     ...:         for j in i:
     ...:           l.append(j.split(' '))
     ...:     return l
     ...: df1.names.apply(extractor)
Out[236]:
0    [[Hans, Peter], [Harry, Potter]]
1        [[bla, bla], [some, string]]
Name: names, dtype: object