python - 如何将“无效”分配给函数的所有输出?
问题描述
我必须定义一个函数,它接受输入 Year、Crash_Month、Crash_Day 和 Crash_Time 并返回输出季节(夏季为第 12、1、2 个月,秋季为第 3、4、5 个月等)工作日(周一:1 至周日:7 ) 和 time_of_day (如早上、下午、晚上和晚上)。我创建了以下代码来定义我的函数:
df = pd.DataFrame({'year': (data_dict['Year']),
'season': (data_dict['Crash_Month']),
'weekday': (data_dict['Crash_Day']),
'time_of_day': (data_dict['Crash_Time'])})
df['time_of_day'] = pd.to_datetime(df['time_of_day'], format = "%H:%M:%S", errors = 'coerce')
d = {1:'Monday', 2:'Tuesday', 3:'Wednesday', 4:'Thursday', 5:'Friday', 6:'Saturday', 7:'Sunday'}
df['weekday'] = df['weekday'].map(d)
s = {12:'Summer', 1:'Summer', 2:'Summer', 3:'Autumn', 4:'Autumn', 5:'Autumn', 6:'Winter', 7:'Winter', 8: 'Winter', 9: 'Spring', 10: 'Spring', 11:'Spring'}
df['season'] = df['season'].map(s)
df['time_of_day']=df['time_of_day'].dt.hour.apply(lambda x: np.select([0<=x<6,
6<=x<12,
12<=x<18,
12<=x<24],
['Night', 'Morning', 'Afternoon', 'Evening']))
def compute_time_day_year(df):
return(df)
它返回具有所需输出的数据帧。但是,在 excel 文件中,一些 Crash_Time 值是“未知”。对于这些“未知”条目,我想将数据框中的所有输出(季节、工作日、时间)分配为“无效”。我尝试使用:
while True:
try:
compute_time_day_year(df)
except ValueError:
return 'INVALID'
但输出不会将任何值更改为无效。有人对如何将所有输出分配给“无效”有任何建议吗?
解决方案
因为to_datetime
有参数errors = 'coerce'
它返回字符串的缺失值UNKNOWN
,所以将NaN
s 设置为weekday
和season
列:
df['time_of_day'] = pd.to_datetime(df['time_of_day'], format = "%H:%M:%S", errors = 'coerce')
df.loc[df['time_of_day'].isna(), ['weekday','season']] = np.nan
如果要设置所有列:
df.loc[df['time_of_day'].isna()] = np.nan
#or
#df = df.mask(df['time_of_day'].isna())
推荐阅读
- java - 是否可以在 Java 中随机播放流
- dart - 我想知道这个词法分析代码中的错误是什么
- nestjs - NestJs - ConfigModule.forRoot isGlobal 不起作用
- firebase - Google Tag Manager JSON 应该致力于版本控制?
- nlp - 预训练的 FastText 超参数
- c++ - 使用 operator new 和placement new 创建非默认可构造对象的动态数组
- python - 无法填充某些行的缺失值
- c# - WebClient.DownloadString:无效的 JSON 原语:
- excel - 使用 CurrentRegion 的自定义范围将第一列的单元格索引设置为 -10?
- python-3.x - 使用 boto3 返回 s3 前缀中的对象列表