首页 > 解决方案 > 如何删除熊猫函数中的过滤行?

问题描述

在主文件中,我在 df_read 中循环,我想对行进行排序并将它们保存在 df_read 中。因为它有几行相同的行并且我遍历每一行,所以我可能在新的 Excel 列表 (df_write) 中有几行相同的行。我尝试使用 .drop 方法删除双行,但该行保留在 df_read 文件中。我知道 Pandas 会创建原始 Excel 文件的副本。这是否意味着函数 (sorted_functions.py) 打开它自己的副本,而 main.py 打开另一个副本?这样的功能和主要工作在2个不同的副本中而不是相同的?

主文件

    df_read.to_excel('Data/Bauteilliste.xlsx')

# set counter back to 0
row_counter = 0
df_sorted_list = []

# for-slice to filter the rows in df_read
# see def sort_functions
for row in df_read:
    if df_read.at[row_counter, 'KZ'] == 'R-R':
            df_sorted = sort_component(df_read, row_counter, 'Wickelfalzrohr', 'L')
            df_sorted_list.append(df_sorted)

            row_counter += 1
    else:
        row_counter += 1

# concat df_sorted_list to df_write
df_write = pd.concat(df_sorted_list, ignore_index=True)

# save new Excel file        
df_write.to_excel('Data/Bauteilliste_sorted.xlsx')

print('end')




Unnamed: 0  Nr  TsNr    LvPos   PosNr   Anz Bez KZ  KennZahl    Art AG  A   B   C   D   E   F   L   W   R   G   H   M   N   X   Y   Ra1Vt   Ra2Vt   Ra3Vt   OF  GW  IsoOf   Bem Bem1    RF  D1  D2  ... L2  L3  L4  L5  Abmessung   Ma  MS  St  IsoArt  IsoZ    Bem2    LtgTyp  Ra1Rl   Ra2Rl   Ra3Rl   OfRoh   AbrArt  ListTyp ContainsIso ContainsFrames  HatEinzelteilzeichnung  Du  Lu  OfRund  OfIsoRund   MaterialListeOf Dmax    MaterialListeAG IsZehnderUPV    IsHovalUPV  OfIsoBauteil    OfOval  OfL90   IfcGlobalId Manufacturer    ArticleNumber   StandardNumber
0   0   NaN NaN NaN NaN 1   Wickelfalzrohr  R-R NaN Längenmaß (m)   NaN NaN NaN NaN 160 NaN NaN 6030    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN Stahlblech verzinkt 0.6 NaN NaN NaN NaN Zuluft  NaN NaN NaN NaN L   L   False   False   False   NaN NaN 3.03    NaN NaN NaN NaN False   False   NaN NaN NaN 2Vw2HO7Vv7wQx4hwLX4DH9  NaN NaN NaN
1   1   NaN NaN NaN NaN 1   Wickelfalzrohr  R-R NaN Längenmaß (m)   NaN NaN NaN NaN 355 NaN NaN 2265    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN Stahlblech verzinkt 0.7 NaN NaN 60.0    NaN Abluft fetthaltig   NaN NaN NaN NaN L   L   True    False   False   NaN NaN 2.53    3.38    NaN NaN NaN False   False   NaN NaN NaN 3XnEXpWHn2egNs8tFyzijO  NaN NaN NaN
2   2   NaN NaN NaN NaN 1   Wickelfalzrohr  R-R NaN Längenmaß (m)   NaN NaN NaN NaN 200 NaN NaN 12332   NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN Stahlblech verzinkt 0.6 NaN NaN NaN NaN Abluft  NaN NaN NaN NaN L   L   False   False   False   NaN NaN 7.75    NaN NaN NaN NaN False   False   NaN NaN NaN 07CVFcxTvBBfAws5v4Evmo  NaN NaN NaN
3   3   NaN NaN NaN NaN 1   Wickelfalzrohr  R-R NaN Längenmaß (m)   NaN NaN NaN NaN 100 NaN NaN 2110    NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN Stahlblech verzinkt 0.6 NaN NaN 60.0    NaN Abluft  NaN NaN NaN NaN L   L   True    False   False   NaN NaN 0.66    1.46    NaN NaN NaN False   False   NaN NaN NaN 1g3rQ6SKnDePvXCSoavSyK  NaN NaN NaN
4   4   NaN NaN NaN NaN 1   Wickelfalzrohr  R-R NaN Längenmaß (m)   NaN NaN NaN NaN 125 NaN NaN 785 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN Stahlblech verzinkt 0.6 NaN NaN NaN NaN Abluft  NaN NaN NaN NaN L   L   False   False   False   NaN NaN 0.31    NaN NaN NaN NaN False   False   NaN NaN NaN 2uql6luGz6H9MvAwQofnkf  NaN NaN NaN

排序函数.py

import pandas as pd
def sort_component(df_read, row_counter, description_component, filt_rule):

        # Filter settings
        filt = (df_read['KZ'] == df_read.at[row_counter, 'KZ']) & (df_read['A'] == df_read.at[row_counter, 'A']) & (df_read['B'] == df_read.at[row_counter, 'B']) & (df_read['W'] == df_read.at[row_counter, 'W']) & (df_read['D'] == df_read.at[row_counter, 'D']) & (df_read['D1'] == df_read.at[row_counter, 'D1']) & (df_read['D2'] == df_read.at[row_counter, 'D2']) & (df_read['D3'] == df_read.at[row_counter, 'D3']) & (df_read['IsoArt'] == df_read.at[row_counter, 'IsoArt']) & (df_read['IsoZ'] == df_read.at[row_counter, 'IsoZ']) & (df_read['LtgTyp'] == df_read.at[row_counter, 'LtgTyp'])

        counter_length = 0
        counter_square_meters_isolation = 0

        # for-Slice, get Elements with isolation
        for row in df_read.loc[filt, filt_rule]:
            counter_length += row

        for row in df_read.loc[filt, 'IsoOf']:
            counter_square_meters_isolation += row            

        print(counter_length)
        # create empty List 
        df_sorted = []
        df1 = None
        # append both rows to df3
        df1 = pd.DataFrame([[df_read.at[row_counter, 'Bez'], df_read.at[row_counter, 'KZ'], df_read.at[row_counter, 'A'], df_read.at[row_counter, 'B'], df_read.at[row_counter, 'W'], df_read.at[row_counter, 'D'], df_read.at[row_counter, 'D1'], df_read.at[row_counter, 'D2'], df_read.at[row_counter, 'D3'], df_read.at[row_counter, 'IsoArt'], df_read.at[row_counter, 'IsoZ'], df_read.at[row_counter, 'LtgTyp'], counter_length, counter_square_meters_isolation ]],
                    columns=['Bez', 'KZ', 'A', 'B', 'W', 'D', 'D1', 'D2', 'D3', 'IsoArt', 'IsoZ', 'LtgTyp', 'L', 'Isom²'])

        df_sorted = pd.concat([df1])

        print(df_read.at[row_counter, 'D'])
        df_read = df_read.drop(df_read[(df_read.KZ == df_read.at[row_counter, 'KZ']) & (df_read.A == df_read.at[row_counter, 'A']) & (df_read.B == df_read.at[row_counter, 'B']) & (df_read.W == df_read.at[row_counter, 'W']) & (df_read.D == df_read.at[row_counter, 'D']) & (df_read.D1 == df_read.at[row_counter, 'D1']) & (df_read.D2 == df_read.at[row_counter, 'D2']) & (df_read.D3 == df_read.at[row_counter, 'D3']) & (df_read.IsoArt == df_read.at[row_counter, 'IsoArt']) & (df_read.IsoZ == df_read.at[row_counter, 'IsoZ']) & (df_read.LtgTyp == df_read.at[row_counter, 'LtgTyp'])].index, inplace=True)
        print(df_read)

        return df_sorted



0
160
None
0
355
None
0
200
None
0
100
None
0
125
None
0
100
None
0
200
None
0
250
None
0
160
None
0
160
None
0
200
None
0
200
None
0
125
None
0
200
None
0
160
None
0
125
None
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2645             try:
-> 2646                 return self._engine.get_loc(key)
   2647             except KeyError:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 16

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-4-03f0f124ecb3> in <module>
     43 # see def sort_functions
     44 for row in df_read:
---> 45     if df_read.at[row_counter, 'KZ'] == 'R-R':
     46             df_sorted = sort_component(df_read, row_counter, 'Wickelfalzrohr', 'L')
     47             df_sorted_list.append(df_sorted)

~\anaconda3\lib\site-packages\pandas\core\indexing.py in __getitem__(self, key)
   2176 
   2177         key = self._convert_key(key)
-> 2178         return self.obj._get_value(*key, takeable=self._takeable)
   2179 
   2180     def __setitem__(self, key, value):

~\anaconda3\lib\site-packages\pandas\core\frame.py in _get_value(self, index, col, takeable)
   2917         # use positional
   2918         col = self.columns.get_loc(col)
-> 2919         index = self.index.get_loc(index)
   2920         return self._get_value(index, col, takeable=True)
   2921 

~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_loc(self, key, method, tolerance)
   2646                 return self._engine.get_loc(key)
   2647             except KeyError:
-> 2648                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   2649         indexer = self.get_indexer([key], method=method, tolerance=tolerance)
   2650         if indexer.ndim > 1 or indexer.size > 1:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 16

如果我将 inplace=True 更改为 inplace=False 我没有错误,但我的新 df_write 中有几行相同的行

标签: pythonpandas

解决方案


推荐阅读