python - Python Pandas 绘图警告
问题描述
当我在 spyder 中使用 pandas 绘图数据时。它总是会显示一条警告消息:
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexing.py:494:SettingWithCopyWarning:试图在数据帧的切片副本上设置值。尝试使用 .loc[row_indexer,col_indexer] = value 代替。请参阅文档中的警告:http: //pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy self.obj[item] = s
我的脚本如下:
import pandas as pd
loc0 = r'D:\DC_BP00010.T0058_20190804_082758_15_14_PM2_1031.txt'
loc1 = r'D:\DC_BP00010.T0058_20190804_082758_17_16_PM1_1193.txt'
locs = [loc0,loc1] # Update files in the list
parameters_must_be = ['Time', 'StepNo (Int)'] # Do not change this one
parameters = ["HeadBEPTrend1 (Float)"] # Key in parameters needed
parameters_all = parameters_must_be.append(parameters)
endpoint_steps = [3] # Update endpoint steps in the list
Titles = 'BP00010' # Titles for plot
Colors = ['black','red','brown','crimson','olive','blue','yellow','darkorange','lime','purple','deeppink','dodgerblue','orange','indigo','darkslateblue','lawngreen','darkslategray','darkgreen','midnightblue','lightseagreen','gold','maroon','navy','teal']
dfs = []
sa = []
ss = []
axs = []
n = len(locs) # Number of datalog files
for i in range(0,n):
dfs.append(pd.read_csv(locs[i], sep=('\t'), skiprows=6, usecols=parameters_all))
ss.append(dfs[i][dfs[i]['StepNo (Int)'].isin(endpoint_steps)])
sa.append(ss[i].loc[:,'Time']-ss[i].loc[:,'Time'].iloc[0])
ss[i].loc[:,'Time'] = sa[i].loc[:]
ax=ss[0].plot(x='Time', y=parameters, title=Titles, color=Colors[0:len(parameters)], linewidth=1)
if n>1:
for i in range(1,n):
axs.append(ss[i].plot(x='Time', y=parameters, color=Colors[len(parameters)*i:len(parameters)*i+len(parameters)], linewidth=1, ax=ax))
ax.set_xlim(0,80)
ax.set_ylim(0,60)
ax.set_ylabel('Endpoint Intensity')
ax.legend(['BP00010#14','BP00010#15','BP00010#16','BP00010#17'], bbox_to_anchor=(1.31, .5), loc=5, borderaxespad=0.)
解决方案
ss[i].loc[:,'Time'] = sa[i].loc[:]
导致错误:
- 您正在尝试更改另一个数据框中的值。
ss
是数据框列表ss[i]
是来自的特定数据框dfs
ss
并且sa
是从以下创建的部分数据框的列表:
ss.append(dfs[i][dfs[i]['StepNo (Int)'].isin(endpoint_steps)])
ss
来自dfs
sa.append(ss[i].loc[:,'Time']-ss[i].loc[:,'Time'].iloc[0])
sa
来自ss
- 从其他数据框创建数据框很好,但这样做会引用原始数据,而不是副本。
.copy()
创建时添加ss
和sa
:
ss.append(dfs[i][dfs[i]['StepNo (Int)'].isin(endpoint_steps)].copy())
sa.append(ss[i].loc[:,'Time']-ss[i].loc[:,'Time'].iloc[0].copy())
推荐阅读
- kubernetes - 在 k8s pod 中应用任务
- reactjs - 在 reactjs 中为所有相同类型的组件设置样式属性
- r - 如何过滤 R 中具有特定值的行?
- c# - 无法从 ASP.NET Core 2.1 控制器获取 IdentityUser 数据
- git - 使用 TortoiseGit 清除旧的提交
- ios - 角度 6 - 最新 ios 上的 3d touch 问题
- tensorflow - TensorFlow 中的“Flex Op”是什么意思?
- bash - 使用 AppleScript 或 Automator 从文本文件中查找和复制带有文本字符串的图像,并将图像复制到另一个文件夹
- ios - Xcode - 更改框架的搜索路径
- sql-server - 为什么我们需要删除表来重新链接它们?