如何在屏蔽数据后避免由 python 使用 UserWarning 完成的隐式修复
Posted
技术标签:
【中文标题】如何在屏蔽数据后避免由 python 使用 UserWarning 完成的隐式修复【英文标题】:How to avoid Implicit fix done by python with UserWarning after Masking Data 【发布时间】:2019-05-20 06:30:23 【问题描述】:当我用另一组数据屏蔽我的数据集时,它会显示一个 UserWarning:布尔系列键将被重新索引以匹配 DataFrame 索引。我将如何避免这种情况? Python 会自动重新索引它,但该列的标题是空白的,我似乎无法重命名它,所以我可以在我的代码中引用该列。我也不想依赖这种隐含的修正。
我尝试通过 pd.DataFrame.columns() 或 pd.DataFrame.rename() 两种方式手动重命名列。出于某种原因,我得到一个错误,即它需要 3 个元素而不是 4 个元素,或者添加的空列索引不会被重命名。
# select data and filter it which results in the error which fixes the dataframe but leaves the column name empty
stickData = data[['Time','Pitch Stick Position(IN)','Roll Stick Position (IN)']]
filteredData = stickData[contactData['CONTACT'] == 1]
# moving forward from the error I tried using rename which does not error but also does nothing
filteredData.rename(index=0:'Index')
# I also tried this
filteredData.rename(index='':'Old_Index')
# I even went and tried to add the names of the dataframe like so which resulted in ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements
filteredData.columns = ['Old_Index','Time','Pitch Stick Position(IN)','Roll Stick Position (IN)']
filteredData.head()的当前dataframe在python隐式修正后是这样的:
Index Time Pitch Stick Position(IN) Roll Stick Position (IN)
0 1421 240:19:06:40.200 0.007263 -0.028500
1 1422 240:19:06:40.400 0.022327 0.139893
2 1423 240:19:06:40.600 -0.016409 0.540756
3 1424 240:19:06:40.800 -0.199329 0.279971
4 1425 240:19:06:41.000 0.013719 -0.018069
但我想在不依赖隐式更正的情况下显示带有 Old_index 标记的更多内容:
Index Old_index Time Pitch Stick Position(IN) Roll Stick Position (IN)
1 1421 240:19:06:40.200 0.007263 -0.028500
2 1422 240:19:06:40.400 0.022327 0.139893
3 1423 240:19:06:40.600 -0.016409 0.540756
4 1424 240:19:06:40.800 -0.199329 0.279971
5 1425 240:19:06:41.000 0.013719 -0.018069
【问题讨论】:
【参考方案1】:您的代码中有一些错误:
-
不要使用chained indexing。请改用
loc
/ iloc
访问器。
Assign back to variables 使用未就地操作的方法时。
一般情况下,不要使用派生自其他数据帧的布尔索引器。如果可以保证行对齐,则通过pd.Series.values
提取 NumPy 数组表示。
例如,假设contactData
中的行与filteredData
中的行对齐,这将起作用
cols = ['Time','Pitch Stick Position(IN)','Roll Stick Position (IN)']
filteredData = data.loc[(contactData['CONTACT'] == 1).values, cols]\
.rename(index=0:'Index')
请注意,我们可以链接诸如loc
和rename
之类的方法,而不是每次都显式分配回filteredData
。
【讨论】:
【参考方案2】:你能试试吗:
filteredData = stickData[contactData['CONTACT'] == 1].reset_index().rename(columns='index': 'Old_index')
或者把这块放在某个地方,我没有你的样本数据,我无法测试它
.reset_index().rename(columns='index': 'Old_index')
【讨论】:
以上是关于如何在屏蔽数据后避免由 python 使用 UserWarning 完成的隐式修复的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Webpack 上避免重复的 sass 导入(使用 @use)