python - 如何删除熊猫函数中的过滤行?
问题描述
在主文件中,我在 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 中有几行相同的行
解决方案
推荐阅读
- jquery - 执行另一个 ajax 请求后 Ajax 请求不起作用
- ffmpeg - 不支持编解码器 h264_cuvid
- python - 为什么我在提供访问令牌时收到未经授权的代码 (401)?
- angular - Gtk 消息:10:59:42.836:GtkDialog 映射没有临时父级。这是不鼓励的。PID 16131 收到地址的 SIGSEGV:0x10
- python - 多次调用方法时,使用 django rest 序列化程序时缺少一些数据?
- python - 桶时间超过 24 小时时钟,并汇总每个桶的数量
- mysql - 如何在laravel mysql中获取加入和辞职日期内的员工名单,包括空日期
- php - 检查自定义搜索中的帖子类型以获取 Woocommerce 产品属性
- rspec - 当结果是随机的时运行 rspec 测试两次
- android - 用于 android 定价的谷歌地图 api 密钥