【问题标题】:selecting a df row by month formatted with (lambda x: datetime.datetime.strptime(x, '%Y-%m-%dT%H:%M:%S%z'))按月选择 df 行格式为 (lambda x: datetime.datetime.strptime(x, \'%Y-%m-%dT%H:%M:%S%z\'))
【发布时间】:2022-11-04 02:12:37
【问题描述】:

我对 geopandas 和 pandas datetime 对象有一些问题;我一直收到错误

pandas Invalid field type <class 'pandas._libs.tslibs.timedeltas.Timedelta'>

当我尝试使用 gpd.to_file() 保存它时,显然这是 pandas 和 geopandas 日期类型之间的一个已知问题,所以我使用了

df.DATE = df.DATE.apply(lambda x: datetime.datetime.strptime(x, '%Y-%m-%dT%H:%M:%S%z'))

要获得一个 datetime 对象,我可以在保存结果时进行操作而不会出现上述错误。由于这种变化,我按月选择

months = [4]
for month in months:
    df = df[[(pd.DatetimeIndex(df.DATE).month == month)]]

不再起作用,抛出一个值错误。

ValueError: Item wrong length 1 instead of 108700.

我尝试删除 pd.DatetimeIndex 但这会引发数据帧系列错误

AttributeError: 'Series' object has no attribute 'month'

df = df[(df.DATE.month == month)]

给我同样的错误。 我知道它转换为 datetime 对象,因为 print(df.dtype) 显示 DATE datetime64[ns, UTC] 和

for index, row in df.iterrows():
    print(row.DATE.month)

将月份作为整数打印到终端。

在不返回 pd.Datetime 的情况下,我该如何修复当月的选择语句?

【问题讨论】:

    标签: python pandas geopandas


    【解决方案1】:

    语句 df.DATE 返回一个 Series 对象。那没有.month 属性。系列中的日期确实如此,这就是row.DATE.month 起作用的原因。尝试类似:

    filter = [x.month == month for x in df.DATE]
    df_filtered = df[filter]
    

    在此之前,我不确定你想用pd.DatetimeIndex(df.DATE).month == month) 完成什么,但类似的修复应该可以解决它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多