Python Pandas删除过程中出现内存错误

2024-09-28 20:49:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有825468行的数据框。 我在上面表演。在

  frame = frame.drop(frame.loc[(
            frame['RR'].str.contains(r"^([23])[^-]*-\1[^-]*$")), 'RR'].str.replace("[23]([^-]*)-[23]([^-]*)", r"\1-\2").isin(
             series1.str.replace("1([^-]*)-1([^-]*)", r"\1-\2"))[lambda d: d].index)

在哪里

^{pr2}$

那么它能做什么呢

准备一个序列,其中RR具有类似于1abc-1bcd的值,然后如果在帧中有一个RR类似{},在替换之后变成{},并且在替换之后它也在序列中,那么它将被丢弃。在

但它给人记忆错误。是有一种更有效的方法来执行同样的操作。在

例如

如果在测向。。在

     RR
0    2abc-2abc
1    1abc-1abc
2    3abc-3abc
3    2def-2def
4    3def-3def
5    def-dfd
6    sdsd-sdsd
7    1def-1def

那么从这个帧中2abc-2abc和{}应该被删除,因为在删除2,3之后它变成了{},当我们从1abc-1abc中删除{}时,它也是{}。2def-2def不应该被删除,因为没有{}

输出:

     RR
0    1abc-1abc
1    def-dfd
2    sdsd-sdsd
3    1def-1def

Tags: 数据lambdadefrr序列framelocreplace
1条回答
网友
1楼 · 发布于 2024-09-28 20:49:15

更新2:

In [176]: df
Out[176]:
          RR
0  2abc-2abc
1  3abc-3abc
2  2def-2def
3  3def-3def
4    def-dfd
5  sdsd-sdsd
6  1def-1def
7    abc-abc
8    def-def

In [177]: df[['d1','s','s2']] = df.RR.str.extract(r'^(?P<d1>\d+)(?P<s1>[^-]*)-\1(?P<s2>[^-]*)', expand=True)

In [178]: df
Out[178]:
          RR   d1    s   s2
0  2abc-2abc    2  abc  abc
1  3abc-3abc    3  abc  abc
2  2def-2def    2  def  def
3  3def-3def    3  def  def
4    def-dfd  NaN  NaN  NaN
5  sdsd-sdsd  NaN  NaN  NaN
6  1def-1def    1  def  def
7    abc-abc  NaN  NaN  NaN
8    def-def  NaN  NaN  NaN

In [179]: df.s += df.pop('s2')

In [180]: df
Out[180]:
          RR   d1       s
0  2abc-2abc    2  abcabc
1  3abc-3abc    3  abcabc
2  2def-2def    2  defdef
3  3def-3def    3  defdef
4    def-dfd  NaN     NaN
5  sdsd-sdsd  NaN     NaN
6  1def-1def    1  defdef
7    abc-abc  NaN     NaN
8    def-def  NaN     NaN

In [181]: result = df.loc[~df.s.isin(df.loc[df.d1 == '1', 's']) | (~df.d1.isin(['2','3'])), 'RR']

In [182]: result
Out[182]:
0    2abc-2abc
1    3abc-3abc
4      def-dfd
5    sdsd-sdsd
6    1def-1def
7      abc-abc
8      def-def
Name: RR, dtype: object

更新:

^{pr2}$

注意:我特意添加了8 th行:abc-abc,不应删除(如果我正确理解您的问题)

溶液1:使用.str.replace()drop_duplicates()方法:

In [178]: (df.sort_values('RR')
     ...:    .RR
     ...:    .str.replace("[23]([^-]*)-[23]([^-]*)", r"1\1-1\2")
     ...:    .drop_duplicates()
     ...: )
     ...:
Out[178]:
1    1abc-1abc
7    1def-1def
8      abc-abc
5      def-dfd
6    sdsd-sdsd
Name: RR, dtype: object

解决方案2:使用.str.replace().str.contains()方法和布尔索引:

In [172]: df.loc[~df.sort_values('RR')
     ...:           .RR
     ...:           .str.replace("[23]([^-]*)-[23]([^-]*)", r"_\1-_\2")
     ...:           .str.contains(r"^_[^-]*-_")]
     ...:
Out[172]:
          RR
1  1abc-1abc
5    def-dfd
6  sdsd-sdsd
7  1def-1def
8    abc-abc

注意:您可能需要用另一个符号来替换'_',这在RR列中永远不会出现

相关问题 更多 >