删除列表的最后一个元素:为什么".pop()不起作用?



我正在开发一个测试数据集

print(df.head(10))
0                   NaN
1     93/2; 99/3; 05/4;
2                   NaN
3                   NaN
4                   NaN
5                   NaN

现在我想将字符串";93/2;99/3;05/4"以获得更简洁的数据结构,用于后续分析。因此,第一步将在">

df= df.apply(lambda x: x.split(';'))

产生

0                        []
1    [93/2,  99/3,  05/4, ]
2                        []
3                        []
4                        []
5                        []
6                        []
7                        []
8                        []
9                        []

正如您所看到的,列表的最后一个元素是一个空值,我想删除它。我曾考虑使用.pop()函数,但这会产生

df = df.apply(lambda x: x.pop())
print(df.head(10))
0    
1    
2    
3    
4    
5    
6    
7    
8    
9 

如果我使用切片

df = df.apply(lambda x: x[:-1])

我得到预期的输出

0                      []
1    [93/2,  99/3,  05/4]
2                      []
3                      []
4                      []
5                      []
6                      []
7                      []
8                      []
9                      []

有人能解释一下为什么pop函数没有像我预期的那样在这里工作吗?

提前谢谢!

有一个矢量函数用于拆分字符串str.split,一个用于拆分strip字符:

假设这里有一个数据帧,尽管您的示例可能表明您有一个系列:

# strip trailing ;   # split on ;
df['lst'] = df['col'].str.rstrip(';').str.split(';s*')

if系列:

ser2 = ser.str.rstrip(';').str.split(';s*')

输出:

col                 lst
0                NaN                 NaN
1  93/2; 99/3; 05/4;  [93/2, 99/3, 05/4]
2                NaN                 NaN
3                NaN                 NaN
4                NaN                 NaN
5                NaN                 NaN

它是有效的。您将返回的pop()分配回您的dfpop()返回弹出的元素。您将该元素分配给df。

最新更新