我一直在努力制作一个新的专栏,根据"一周中的一天"专栏来说明周末或不。我使用以下代码基于之前的堆栈溢出问题。
weekday_classification = {
'Weekday': ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
'Weekend': ['Saturday', 'Sunday']
}
weekday_classification = {day: all_days for all_days, l in weekday_classification.items() for day in l}
df["Weekend"] = df['Day of Week'].map(weekday_classification)
df.head()
虽然上面的代码产生了预期的效果-我得到了一个警告,声明:
ippython -input-21-e273917f31f9:6: SettingWithCopyWarning:一个值是试图在数据帧的切片副本上进行设置。试着用.loc[row_indexer,col_indexer] = value
如何绕过这个问题,我已经阅读了如何创建新列的文档,但是这似乎只适用于更简单的列创建。
我还在摸索Python和数据分析,很高兴能收到大家的反馈。
将你的字典颠倒成这样
weekday_classification = {
'Monday': 'Weekday',
'Tuesday': 'Weekday',
'Wednesday': 'Weekday',
'Thursday': 'Weekday',
'Friday': 'Weekday',
'Saturday': 'Weekend',
'Sunday': 'Weekend'
}
然后基于该weekend_classification
字典构建一个新的数据框架,以与现有的df
连接
In []: days = pd.DataFrame(data=weekday_classification.values(), index=weekday_classification.keys(), columns=['Weekday/end'])
days
Out[]:
Weekday/end
Monday Weekday
Tuesday Weekday
Wednesday Weekday
Thursday Weekday
Friday Weekday
Saturday Weekend
Sunday Weekend
In []: df.join(days, on=df['Day of Week'])
Out[]:
Day of Week Weekday/end
0 Monday Weekday
1 Tuesday Weekday
2 Wednesday Weekday
3 Thursday Weekday
4 Friday Weekday
5 Saturday Weekend
6 Sunday Weekend
因为你的df
是另一个DataFrame的'子集'。您可能已经对另一个DataFrame的列进行了一些过滤,以生成以下df
:
df = df_p[df_p['some_col'].isin(some_set)]
Pandas可以简单地创建对df_p
部分的引用来表示df
,而不是实际创建df
。在这种情况下,df
就像df_p
的一个切片,修改df
会引起警告,因为这可能会影响df_p
。这就是错误消息所描述的内容。确保在创建df
时df
有自己的数据。对其他DataFrame进行过滤,如:
df = df_p[df_p['some_col'].isin(some_set)].copy()
或使用copy.deepcopy()处理复杂数据