在数据帧行上迭代 for 循环

use*_*654 3 python list pandas

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

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

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

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

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

res = [str(list[0]).split for list in x]
Run Code Online (Sandbox Code Playgroud)

但我得到一个包含这些函数的列表:

[<function str.split(sep=None, maxsplit=-1)>,...]
Run Code Online (Sandbox Code Playgroud)

DataFrame 的预期输出是

 0 [['Hans','Peter],['Harry','Potter']]
 1 [['bla','bla'],['some','string']]
Run Code Online (Sandbox Code Playgroud)

C.N*_*ivs 5

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

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

''.split() # call with parentheses
[]
Run Code Online (Sandbox Code Playgroud)

其次,您需要深入了解names. 您可以先用 for 循环模拟:

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

['Hans Peter']
['Harry Potter']
['bla bla']
['some string']
Run Code Online (Sandbox Code Playgroud)

您将仍然使用列表,因此您可以使用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]]
Run Code Online (Sandbox Code Playgroud)