我试图根据其他2列的值在我的pandas数据框中创建一个新列。我首先使用包含经度的列来计算该位置的时间:
current_weather['Hour'] = np.where(round(current_weather['Longitude']/15,0) < 0,
(round(24 + current_weather['Longitude']/15,0).astype(int)),
(round(current_weather['Longitude']/15,0).astype(int)))
此列中的值为numpy.int32。
然后,我通过将“小时”列与作为整数的unix时间戳记的“日出”和“日落”进行比较,来创建一列标记,以区分是白天还是夜晚。
current_weather['Day/Night'] = np.where((current_weather['Hour'] >= datetime.datetime.fromtimestamp(current_weather['Sunrise']).hour) & (current_weather['Hour'] <= datetime.datetime.fromtimestamp(current_weather['Sunset']).hour),
'Day','Night')
这会导致错误
TypeError: cannot convert the series to <class 'int'>
我尝试将不同的值强制转换为不同的数据类型,但无法正常工作。谁能告诉我如何将这些值转换为相同的数据类型?
答案 0 :(得分:0)
您错误地使用了datetime.datetime.fromtimestamp。不需要输入序列。
>>> import pandas as pd
>>> sunset = pd.to_datetime(pd.Series([1349720105, 1349806505, 1349892905,]), unit='s')
>>> sunset
0 2012-10-08 18:15:05
1 2012-10-09 18:15:05
2 2012-10-10 18:15:05
dtype: datetime64[ns]
>>>
由于日出和日落为秒,因此将其创建为DateTime series并与小时序列进行比较。
>>> sunset.dt.hour
0 18
1 18
2 18
dtype: int64
>>> hour = pd.Series([6, 12, 20]) # assume hour you have
>>> hour > sunset.dt.hour
0 False
1 False
2 True
dtype: bool
>>>
现在您可以使用dt accessor从这些时间戳中提取小时。
{{1}}