data_shitang = data2[(data2['消费地点'].map(lambda x: '食堂' in x)) & (data2['消费类型'] == '消费')] data_shitang['消费时间'] = pd.to_datetime(data_shitang.消费时间)报错SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy data_shitang['消费时间'] = pd.to_datetime(data_shitang.消费时间) F:\pythonShuJuChuLi\ShuJuChiLi.py:263: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy data_shitang['就餐类型'] = eating_time(data_shitang['消费时间'])该怎么改
时间: 2024-04-04 20:34:09 浏览: 211
这个警告是由于Pandas对数据进行了链式操作(chained assignment)而引起的。为了避免这个警告,可以使用.loc或.iloc进行操作。具体的,将代码修改为如下形式即可:
data_shitang = data2.loc[(data2['消费地点'].str.contains('食堂')) & (data2['消费类型'] == '消费'), :]
data_shitang.loc[:, '消费时间'] = pd.to_datetime(data_shitang['消费时间'])
data_shitang.loc[:, '就餐类型'] = eating_time(data_shitang['消费时间'])
这样可以避免警告,并且保证代码的正确性。其中,第一行使用了.loc进行索引操作,第二行和第三行则使用了.loc进行数据修改。
相关问题
data_2_1 = pd.merge(data1,data2,left_on='校园卡号',right_on='校园卡号') data_2_1 = data_2_1[data_2_1['消费类型']=='消费'] data_2_2 = pd.merge(data1,data3,on = '门禁卡号') import datetime from datetime import time # 取出食堂的消费记录数据 data_shitang = data2[(data2['消费地点'].map(lambda x:'食堂' in x)) & (data2['消费类型'] =='消费')] data_shitang['消费时间'] = pd.to_datetime(data_shitang.消费时间) def eating_time(x): y = [] for i in x: if time(5,0)<=i.time()<time(10,30): y.append('早餐') elif time(10,35)<=i.time()<time(16,30): y.append('午餐') elif time(16,30)<=i.time()<time(23,30): y.append('晚餐') else : y.append('不明确') return y data_shitang['就餐类型'] = eating_time(data_shitang['消费时间'])
这段代码中,首先通过merge函数将两个数据集data1和data2按照校园卡号进行合并,并筛选出消费类型为“消费”的记录。然后,使用merge函数将数据集data1和data3按照门禁卡号进行合并,并将结果保存在data_2_2中。接着,针对data2数据集,使用map函数和lambda表达式将包含“食堂”关键字的消费地点筛选出来,并将消费时间转换为datetime类型。最后,定义了一个函数eating_time,根据消费时间的时段将消费记录分为早餐、午餐、晚餐和不明确四种类型,并将结果保存在新的'就餐类型'列中。
阅读全文