Python Pandas Plot Предупреждение - PullRequest
0 голосов
/ 17 октября 2019

Когда я использую данные графика панд в spyder. Всегда будет отображаться предупреждение:

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.)

1 Ответ

1 голос
/ 17 октября 2019

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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...