将工作日从整数转换为实际名称时出错
Error while converting weekdays from integer to actual name
我正在尝试使用 python 中的日历库将 pd.dt.weekdays()
列从整数形式转换为其实际名称。
这是我一直在做的,
hours = uber_data["Date/Time"].dt.hour
week_day = uber_data["Date/Time"].dt.weekday
date = uber_data["Date/Time"].dt.date
weekly_data = pd.concat([week_day, hours, date], axis=1)
weekly_data.columns = ["Week Day", "Hour", "Date"]
weekly_data["Week Day"] = weekly_data["Week Day"].apply(lambda x: calendar.day_name[x])
我得到的错误是,
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-e18771afc253> in <module>()
----> 1 weekly_data["Week Day"] = weekly_data["Week Day"].apply(lambda x: calendar.day_name[x])
2 weekly_data["Week Day"]
2 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/series.py in apply(self, func, convert_dtype, args, **kwds)
4211 else:
4212 values = self.astype(object)._values
-> 4213 mapped = lib.map_infer(values, f, convert=convert_dtype)
4214
4215 if len(mapped) and isinstance(mapped[0], Series):
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
<ipython-input-24-e18771afc253> in <lambda>(x)
----> 1 weekly_data["Week Day"] = weekly_data["Week Day"].apply(lambda x: calendar.day_name[x])
2 weekly_data["Week Day"]
/usr/lib/python3.6/calendar.py in __getitem__(self, i)
76
77 def __getitem__(self, i):
---> 78 funcs = self._days[i]
79 if isinstance(i, slice):
80 return [f(self.format) for f in funcs]
TypeError: list indices must be integers or slices, not str
我已经尝试更改“星期几”列的数据类型,但错误仍然存在。
编辑:
使用 Series.dt.day_name()
解决了该问题。如果有人可以提供日历库的解决方案,我们将不胜感激。
你可以试试Series.dt.day_name
:
weekly_data = pd.DataFrame()
weekly_data['Week Day'] = uber_data["Date/Time"].dt.hour
weekly_data['Hour'] = uber_data["Date/Time"].dt.weekday
weekly_data['Date'] = uber_data["Date/Time"].dt.date
weekly_data['Day'] = uber_data["Date/Time"].dt.day_name()
print(weekly_date)
我正在尝试使用 python 中的日历库将 pd.dt.weekdays()
列从整数形式转换为其实际名称。
这是我一直在做的,
hours = uber_data["Date/Time"].dt.hour
week_day = uber_data["Date/Time"].dt.weekday
date = uber_data["Date/Time"].dt.date
weekly_data = pd.concat([week_day, hours, date], axis=1)
weekly_data.columns = ["Week Day", "Hour", "Date"]
weekly_data["Week Day"] = weekly_data["Week Day"].apply(lambda x: calendar.day_name[x])
我得到的错误是,
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-24-e18771afc253> in <module>()
----> 1 weekly_data["Week Day"] = weekly_data["Week Day"].apply(lambda x: calendar.day_name[x])
2 weekly_data["Week Day"]
2 frames
/usr/local/lib/python3.6/dist-packages/pandas/core/series.py in apply(self, func, convert_dtype, args, **kwds)
4211 else:
4212 values = self.astype(object)._values
-> 4213 mapped = lib.map_infer(values, f, convert=convert_dtype)
4214
4215 if len(mapped) and isinstance(mapped[0], Series):
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
<ipython-input-24-e18771afc253> in <lambda>(x)
----> 1 weekly_data["Week Day"] = weekly_data["Week Day"].apply(lambda x: calendar.day_name[x])
2 weekly_data["Week Day"]
/usr/lib/python3.6/calendar.py in __getitem__(self, i)
76
77 def __getitem__(self, i):
---> 78 funcs = self._days[i]
79 if isinstance(i, slice):
80 return [f(self.format) for f in funcs]
TypeError: list indices must be integers or slices, not str
我已经尝试更改“星期几”列的数据类型,但错误仍然存在。
编辑:
使用 Series.dt.day_name()
解决了该问题。如果有人可以提供日历库的解决方案,我们将不胜感激。
你可以试试Series.dt.day_name
:
weekly_data = pd.DataFrame()
weekly_data['Week Day'] = uber_data["Date/Time"].dt.hour
weekly_data['Hour'] = uber_data["Date/Time"].dt.weekday
weekly_data['Date'] = uber_data["Date/Time"].dt.date
weekly_data['Day'] = uber_data["Date/Time"].dt.day_name()
print(weekly_date)