比较'int'类型和'numpy.int32'类型时出错

时间:2018-07-22 01:30:14

标签: python pandas numpy datetime typeerror

我试图根据其他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'>

我尝试将不同的值强制转换为不同的数据类型,但无法正常工作。谁能告诉我如何将这些值转换为相同的数据类型?

1 个答案:

答案 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}}