Python 在熊猫中通过数据帧描绘两次
我有一个稀疏的熊猫数据帧/系列,其值看起来像是AB1234:12、CD5678:34、EF3456:56的变体。大意是Python 在熊猫中通过数据帧描绘两次,python,pandas,Python,Pandas,我有一个稀疏的熊猫数据帧/系列,其值看起来像是AB1234:12、CD5678:34、EF3456:56的变体。大意是 "AB1234:12, CD5678:34, EF3456:56" "AB1234:12, CD5678:34" NaN "GH5678:34, EF3456:56" "OH56:34" 我想把它转换成 ["AB1234","CD5678", "EF3456"] ["AB1234","CD5678"] NaN ["GH5678","EF3456"] ["OH56"] 事实证
"AB1234:12, CD5678:34, EF3456:56"
"AB1234:12, CD5678:34"
NaN
"GH5678:34, EF3456:56"
"OH56:34"
我想把它转换成
["AB1234","CD5678", "EF3456"]
["AB1234","CD5678"]
NaN
["GH5678","EF3456"]
["OH56"]
事实证明,这种“双重划分”是困难的。我知道我们可以A=df[“columnName”].str.split(“,”)
,但是我遇到了一些问题,包括。split(“,”)
似乎不起作用,.split(“,”)会留下空白。此外,在生成的A
中迭代和拆分似乎将我的新列表解释为“浮动”。虽然最后一个问题可能是ipython的技术难题,但我也在努力解决这个问题
有没有办法描述两种类型的分离器,而不是一种?如果不是,您如何执行循环来迭代内部列表
//编辑:将撇号改为逗号-那只是我的阅读障碍
踢进
这是您的数据帧
>>> df
A
0 AB1234:12, CD5678:34, EF3456:56
1 AB1234:12, CD5678:34
2 None
3 GH5678:34, EF3456:56
4 OH56:34
现在我使用split
和replace
将拆分为,“
并删除所有”:“
>>> df.A = [i.replace(':','').split(", ") if isinstance(i,str) else i for i in df.A]
>>> df.A
0 [AB123412, CD567834, EF345656]
1 [AB123412, CD567834]
2 None
3 [GH567834, EF345656]
4 [OH5634]
Name: A
请注意,您可以使用正则表达式进行更一般的拆分:
In [11]: s2
Out[11]:
0 AB1234:12, CD5678:34, EF3456:56
1 AB1234:12, CD5678:34
2 NaN
3 GH5678:34, EF3456:56
4 OH56:34
dtype: object
In [12]: s2.str.split(", '")
Out[12]:
0 [AB1234:12, CD5678:34, EF3456:56]
1 [AB1234:12, CD5678:34]
2 NaN
3 [GH5678:34, EF3456:56]
4 [OH56:34]
dtype: object
In [13]: s2.str.split("\s*,\s*'")
Out[13]:
0 [AB1234:12, CD5678:34, EF3456:56]
1 [AB1234:12, CD5678:34]
2 NaN
3 [GH5678:34, EF3456:56]
4 [OH56:34]
dtype: object
这将删除逗号前后的空格。抱歉-我确实使用了逗号-我刚刚编辑了问题。我设法做到了这一点,并且正在研究如何通过“:”
s描述这些列表。然后删除嵌入列表中的第二项,但是该部分很容易管理,不在问题的范围内。更新了我的答案。希望这就是你想要的!几乎!我不清楚,需要去掉:
后面的数字/分数。我想这将创建一个或多个列表,并可以删除每个嵌入列表的第二项-分数。然而,正则表达式路径似乎缩短了这一点。在您提到正则表达式的提示下,我发现:s2.apply(lambda x:re.split(':\d{1,3},\s',x))
非常接近。我对regex不是很熟悉,所以这只是我拼凑的东西。由于最后一个:\d\d
模式,我在末尾得到一个空列表项,我不知道如何通过正则表达式消除它。@dbyte哦,我明白了,我错过了:位。首先执行正则表达式替换:s2.str.replace(“:\d+”,“”).str.split(“\s*,\s*”)
。完美!尽管数据的结构为(“,\s*”)
。可怕的负鼠。@dbyte星星的意思是“0或更多”(所以它不在乎):)