丢弃期间的Python Pandas内存错误

时间:2016-11-02 13:28:05

标签: python python-2.7 pandas dataframe filtering

我有825468行的df。 我正在通过它表演。

  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)

其中

  series1 = frame.loc[frame['RR'].str.contains("^1[^-]*-1"), 'RR']

它是做什么的

准备一系列RR的值为1abc-1bcd的值,然后在框架中有RR2abc-2bcd,其中abc-bcd在替换后变为 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 并且在更换之后它也会在系列中出现,它会掉线。

但它给出了内存错误。这是一种更有效的方法来执行相同的操作。

对于前。

如果在df ..

2abc-2abc

然后,应该删除此框架3abc-3abcabc-abc,因为删除2,3后它变为1,当我们从1abc-1abc移除abc-abc时它也是2def-2def1def-1def不应被删除,因为没有 RR 0 1abc-1abc 1 def-dfd 2 sdsd-sdsd 3 1def-1def

输出:

"fractionx+3over5moveout+2"
"fractionfractionx+1over7moveoutover3moveout+1", 
"fractionfractionfractionx+3over3moveoutoverx+2moveoutover7moveout+1".

1 个答案:

答案 0 :(得分:1)

<强> UPDATE2:

public static void setLocale(Locale locale){
    Locale.setDefault(locale);
    Configuration config = new Configuration();
    config.setLocale(locale);
    Context context = MyApplication.getInstance();
    context.getResources().updateConfiguration(config,
            context.getResources().getDisplayMetrics());
}

<强>更新

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

注意:我故意添加了8 In [171]: df Out[171]: 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 8 abc-abc 行:th,不应删除(如果我理解你的问题)

解决方案1:使用abc-abc.str.replace()方法:

drop_duplicates()

解决方案2:使用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 .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 替换为'_'列中永远不会出现的其他符号

相关问题