我正在开发一个测试数据集
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()
分配回您的df
。pop()
返回弹出的元素。您将该元素分配给df。