Python 3.x 这个等式中的Lambda和list理解
我创建了一个数据集,如下所示Python 3.x 这个等式中的Lambda和list理解,python-3.x,lambda,split,list-comprehension,Python 3.x,Lambda,Split,List Comprehension,我创建了一个数据集,如下所示 train = pd.DataFrame({'id':[1,2,4],'features':[["A","B","C"],["A","D","E"],["C","D","F"]]}) 当我执行以下行时: train['features_t'] = train["features"].apply(lambda x: " ".join(["_".join(i.split(" ")) for i in x])) 结果很好 0 A B C 1 A D E
train = pd.DataFrame({'id':[1,2,4],'features':[["A","B","C"],["A","D","E"],["C","D","F"]]})
当我执行以下行时:
train['features_t'] = train["features"].apply(lambda x: " ".join(["_".join(i.split(" ")) for i in x]))
结果很好
0 A B C
1 A D E
2 C D F
然而,我对apply中的函数很好奇。它基本上迭代列车数据帧的特征列中的值。之后,它拆分A、B、C,并在没有任何分隔符的情况下重新连接。但是当我试图一步一步地执行时,它给了我一个关于split函数的错误
我尝试创建一个for循环,然后拆分函数和连接函数,但失败了
for x in train['feature']:
a = x.split(" ")
............................
它给了我这个
'list' object has no attribute 'split'
我对这一点的理解可能有什么错误?x是每一行的列表 如果您打印它:
for x in train['features']:
print(x)
结果将是:
['A', 'B', 'C']
['A', 'D', 'E']
['C', 'D', 'F']
您可以使用以下方法完成连接:
for x in train['features']:
a = ''.join(x)
将打印:
基础知识
艾德
CDFx是每行的列表 如果您打印它:
for x in train['features']:
print(x)
结果将是:
['A', 'B', 'C']
['A', 'D', 'E']
['C', 'D', 'F']
您可以使用以下方法完成连接:
for x in train['features']:
a = ''.join(x)
将打印:
基础知识
艾德
CDF有一个额外的循环级别,您忽略了它,因为它不是通过数据帧上的
apply
调用自动实现的。对字符串列表中的值调用lambda
函数。因此,列表理解是在这些字符串上迭代(例如,'A'
,然后是'B'
,然后是'C'
)。对字符串调用split
方法
在显式循环版本中,您试图调用列表上的split
。尝试向循环中添加一个额外的级别,它应该可以工作:
for x in train['feature']:
for i in x:
a = i.split(' ') # this works
我要指出的是,调用split
后紧接着调用join
是一种间接的方法,用下划线替换每个字符串中的空格(在示例中没有空格,但在实际数据中可能有)。您可以使用str.replace
更直接地到达那里:
lambda x: " ".join([i.replace(" ", "_") for i in x])
您忽略了一个额外的循环级别,因为它不是通过数据帧上的
apply
调用自动实现的。对字符串列表中的值调用lambda
函数。因此,列表理解是在这些字符串上迭代(例如,'A'
,然后是'B'
,然后是'C'
)。对字符串调用split
方法
在显式循环版本中,您试图调用列表上的split
。尝试向循环中添加一个额外的级别,它应该可以工作:
for x in train['feature']:
for i in x:
a = i.split(' ') # this works
我要指出的是,调用split
后紧接着调用join
是一种间接的方法,用下划线替换每个字符串中的空格(在示例中没有空格,但在实际数据中可能有)。您可以使用str.replace
更直接地到达那里:
lambda x: " ".join([i.replace(" ", "_") for i in x])