我有下面的Python代码,我在Databricks中运行了一个按行业分类的月度就业数据df。
下面的代码附加一个空df,计算各行业就业率的年变化率(YoY %),并将每个序列向前移动1到12个月,然后将新估计的序列作为新列添加到原始df中:
> # Forecast df parameters: index, column names
index = pd.date_range('2022-11-30', periods=13, freq='M')
columns = summary_table_empl.columns.to_list()
# Append history + empty df
df_forecast = pd.DataFrame(index=index, columns=columns)
df_test_empl=pd.concat([summary_table_empl, df_forecast])
# New df, calculate yoy percent change for every commodity (col)
df_CA_empl_test_yoy= ((df_test_empl - df_test_empl.shift(12))/df_test_empl.shift(12))*100
# Extend each variable as a series from 1 to 12 months
for col in df_CA_empl_test_yoy.columns:
for i in range(1,13):
df_CA_empl_test_yoy["%s_%s"%(col,i)] = df_CA_empl_test_yoy[col].shift(i)
df_CA_empl_test_yoy.head(15)
代码工作正常,但我得到这个警告:
性能警告:DataFrame碎片很多。这通常是多次调用frame.insert
的结果,这样会降低性能。请考虑改用pd. concat(axis = 1)一次联接所有列。若要获得已整理碎片的帧,请使用newframe = frame.copy()
df_CA_empl_test_yoy [" % s_ % s" %(col,i)]= df_CA_empl_test_yoy [col]. shift(i)
如何修改代码以消除此警告消息?
1条答案
按热度按时间jjjwad0x1#
您可以使用以下代码段禁止显示警告:
出现该警告是因为您正在使用
df_CA_empl_test_yoy["%s_%s"%(col,i)]
通过for循环创建新列,每次将新列分配给 Dataframe 时,df_CA_empl_test_yoy["%s_%s"%(col,i)]
都会在内部调用.insert()
方法。我看不出有什么方法可以不用for循环来完成这件事,所以关闭警告是可行之道。