沿着数据帧的行迭代执行for循环

6

我是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())

但是我应该如何迭代一个dataframe呢?我认为我需要构建一个列表推导,然后使用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
你期望的输出是什么? - amanb
刚刚更新 ;) - user11638654
1
在你的列表推导式中,你犯了两个常见的错误:你使用了.split而不是.split()(这就是为什么它返回一个函数而不是结果),并且你使用list作为变量,这可能会掩盖内置的list类型并引起问题。 - G. Anderson
1个回答

5

首先,您需要调用split函数,否则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() 来获取字符串,然后在 pop() 的结果上使用 str.split()
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]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接