1

我有一个稀疏的 pandas DataFrame/Series,其值看起来像"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"]

事实证明,这种“双重划定”是困难的。我知道我们可以,A = df["columnName"].str.split(",")但是我遇到了一些问题,包括这.split(", ")似乎不起作用并且 '.split(",")' 留下空白。此外,迭代生成A和拆分似乎将我的新列表解释为“浮点数”。尽管最后一个问题可能是 ipython 的技术难题——我也在努力解决这个问题。

有没有办法描绘两种类型的分隔符——而不仅仅是一种?如果不是,您如何执行循环以遍历内部列表?

//编辑:把撇号改成逗号——那只是我的阅读障碍开始了

4

2 回答 2

1

这是你的数据框

>>> df
                                 A
0  AB1234:12, CD5678:34, EF3456:56
1             AB1234:12, CD5678:34
2                             None
3             GH5678:34, EF3456:56
4                          OH56:34

现在我使用splitandreplace来分割', '并删除所有':'

>>> 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
于 2013-06-19T16:40:51.787 回答
1

您几乎拥有它,请注意您可以使用正则表达式进行更一般的拆分:

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

这将删除逗号之前或之后的任何空格。

于 2013-06-19T16:41:56.897 回答