cff_copy['weekday_received']=cff_copy['Date_received'].apply(lambda x:x.isoweekday())报错了:'float' object has no attribute 'isoweekday',如何解决?
时间: 2023-06-10 21:05:51 浏览: 142
这个报错是因为 'Date_received' 列中含有 NaN 值,导致 lambda 函数返回的是 float 类型,并且 float 类型没有 'isoweekday' 方法。可以使用 pd.to_datetime() 函数将 ‘Date_received’ 列中的时间格式化,并将 NaN 值填充为 pd.NaT(pandas 中的 NaT 表示缺失值),如下所示:
```
import pandas as pd
import numpy as np
cff_copy['Date_received'] = pd.to_datetime(cff_copy['Date_received'], errors='coerce')
cff_copy['weekday_received'] = cff_copy['Date_received'].apply(lambda x: x.isoweekday() if not pd.isna(x) else np.nan)
```
这样就可以避免 NaN 值导致的报错了。
相关问题
DALVIK THREADS (136): "Signal Catcher" daemon prio=5 tid=7 Runnable | group="system" sCount=0 dsCount=0 flags=0 obj=0x12c401a0 self=0xa85d4a00 | sysTid=944 nice=0 cgrp=default sched=0/0 handle=0x7dba8230 | state=R schedstat=( 54080844 151346 9 ) utm=2 stm=3 core=1 HZ=100 | stack=0x7daad000-0x7daaf000 stackSize=1008KB | held mutexes= "mutator lock"(shared held) native: #00 pc 00303613 /apex/com.android.runtime/lib/libart.so (art::DumpNativeStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, int, BacktraceMap*, char const*, art::ArtMethod*, void*, bool)+78) native: #01 pc 003aeb4b /apex/com.android.runtime/lib/libart.so (art::Thread::DumpStack(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+358) native: #02 pc 003ab193 /apex/com.android.runtime/lib/libart.so (art::Thread::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool, BacktraceMap*, bool) const+34) native: #03 pc 003c3ecf /apex/com.android.runtime/lib/libart.so (art::DumpCheckpoint::Run(art::Thread*)+606) native: #04 pc 003be9bd /apex/com.android.runtime/lib/libart.so (art::ThreadList::RunCheckpoint(art::Closure*, art::Closure*)+356) native: #05 pc 003be079 /apex/com.android.runtime/lib/libart.so (art::ThreadList::Dump(std::__1::basic_ostream<char, std::__1::char_traits<char>>&, bool)+1444) native: #06 pc 003bd9ef /apex/com.android.runtime/lib/libart.so (art::ThreadList::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char>>&)+678) native: #07 pc 003876f3 /apex/com.android.runtime/lib/libart.so (art::Runtime::DumpForSigQuit(std::__1::basic_ostream<char, std::__1::char_traits<char>>&)+130) native: #08 pc 003968a7 /apex/com.android.runtime/lib/libart.so (art::SignalCatcher::HandleSigQuit()+1026) native: #09 pc 00395cff /apex/com.android.runtime/lib/libart.so (art::SignalCatcher::Run(void*)+246) native: #10 pc 000a6077 /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+20) native: #11 pc 00060131 /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30) (no managed stack frames)
这个问题是一个线程崩溃的日志。该日志包含了线程的调用堆栈信息,可以帮助开发者定位问题。在这个例子中,该线程为名为 "Signal Catcher" 的守护进程,它的作用是捕获进程接收到的信号。该线程在运行时发生了错误,导致进程崩溃。具体的原因需要进一步分析调试信息来确定。如果您是该进程的开发者,建议您检查代码,以便找出导致线程崩溃的原因,并进行修复。如果您只是使用该进程,建议您联系该进程的开发者,提交该问题的日志信息,以便开发者能够定位和解决问题。
import pyowm import datetime # 获取当前时间 now = datetime.datetime.now() # 获取上个月的时间 last_month = now.replace(month=now.month-1) # 初始化OpenWeatherMap对象 owm = pyowm.OWM('cff205d4bc569aaffdb80114250e52df') # 把'your-api-key'替换成你的API Key # 获取上个月的天气情况 mgr = owm.weather_manager() observation = mgr.weather_at_place('Shanghai') date_obj = datetime.datetime(last_month.year, last_month.month, 1) one_call = mgr.one_call(lat=observation.weather.location.lat, lon=observation.weather.location.lon, dt=date_obj.timestamp(), exclude='current,minutely,hourly,alerts') condition = one_call.forecast_daily[0].status print('上个月的天气情况是:', condition)被返回'Weather' object has no attribute 'location'
根据您提供的代码,问题可能出在以下这行代码:
```
observation = mgr.weather_at_place('Shanghai')
```
在这里,`observation`对象是通过`mgr.weather_at_place()`方法获取的,但是您并没有指定获取的是哪个时间段的天气数据。因此,`observation`对象只包含当前的天气数据,而没有日期信息。在下一行代码中,您又试图从`observation.weather.location`中获取经纬度信息,因此会出现`'Weather' object has no attribute 'location'`的错误。
要解决这个问题,您可以考虑修改`weather_at_place()`方法的参数,指定获取某个时间点的天气数据。例如,您可以使用`mgr.weather_at_place('Shanghai, CN', time=date_obj.timestamp())`获取上个月的天气数据,其中`'Shanghai, CN'`是城市名称和国家代码的组合,`date_obj.timestamp()`是上个月第一天的时间戳。
修改后的代码如下:
```
import pyowm
import datetime
# 获取当前时间
now = datetime.datetime.now()
# 获取上个月的时间
last_month = now.replace(month=now.month-1)
# 初始化OpenWeatherMap对象
owm = pyowm.OWM('your-api-key') # 把'your-api-key'替换成你的API Key
# 获取上个月的天气情况
mgr = owm.weather_manager()
observation = mgr.weather_at_place('Shanghai, CN', time=date_obj.timestamp()) # 修改这里的参数
condition = observation.weather.status
print('上个月的天气情况是:', condition)
```
请注意,这只是一个示例代码,可能还需要根据您的实际需求进行修改和完善。
阅读全文