python - 如何避免 python 在屏蔽数据后使用 UserWarning 进行隐式修复

标签 python pandas dataframe matplotlib data-science

当我用另一组数据屏蔽我的数据集时,它会显示用户警告: bool 系列键将被重新索引以匹配 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)']

经过 python 隐式修正后,filteredData.head() 的当前数据帧如下所示:

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相反,访问器。
  2. Assign back to variables当使用无法到位的方法时。
  3. 一般情况下,不要使用从其他数据帧派生的 bool 索引器。如果可以保证行对齐,则通过 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'})

请注意,我们可以链接方法,例如locrename,而不是每次都显式分配回filteredData .

关于python - 如何避免 python 在屏蔽数据后使用 UserWarning 进行隐式修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53856748/

相关文章:

python - 在 Python Shell 中打印当前行

python - 将字典转储为 json 文件作为 UTF-8

python - 如何加快此文件创建过程?

python - 在具有不同索引的两个数据帧上进行 Pandas 计算

python - 如何用单个 NaN 替换 pandas 数据框中的多个 NaN 行

python - Pandas 行的条件更改,具有前一行值

python - 在 Python 中将数字从 sqlite 转换为日期

r - 使用 apply 函数创建单个输出矩阵

python - Jupyter笔记本中的功能单元测试?

python - 删除 matplotlib 图中的窗口标题