【问题标题】:Anomaly using numPy datetime64 to work with dates in a pandas Dataframe column使用 numPy datetime64 处理 pandas Dataframe 列中的日期的异常
【发布时间】:2019-05-15 19:28:31
【问题描述】:

对于 pandas DataFrame 中的数据,无法使用 datetime64 将“YYYY-MM”字符串转换为 YYYY-MM 日期时间。

np.datetime64 用于将 'YYYY-MM' 的日期字符串存储在标量或数组中时转换为日期时间,但通过 DateFrame 访问相同数据时则不行。

我想要做的是将列日期(格式:YYYY-MM)转换为日期时间数据(添加或不添加另一列)。

csv 文件数据:

month, volume
2019-01, 100
2019-02, 110

示例代码:

import pandas as pd
import numpy as np

df=pd.read_csv (r'file location')
df["date"]=df["month"].apply(np.datetime64)

# Input (month): 2013-01
# Expected output (date): 2013-01
# Actual output (date): 2013-01-01

因此,datetime64 将 YYYY-MM 更改为 YYYY_MM-01 (另外,YYYY 被转换为 YYYY-01-01)

【问题讨论】:

  • 你想对你做什么date 专栏。这就是 pandas 表示日期时间的方式
  • 我要做的就是从 csv(或 excel)文件中导入一个包含月度数据的文件。因此,2019-01, 100 {first row} 将是 2019 年 1 月的月度交易量。为了执行进一步的操作,我认为最好在日期时间中有日期。 pandas 中日期(每月、每年)的最佳做法是什么?

标签: pandas numpy python-3.7 datetime64


【解决方案1】:

也许您正在寻找 pd.Period:

In [11]: df.date.apply(pd.Period, freq='M')
Out[11]:
0   2019-01
1   2019-02
Name: date, dtype: object

类似,但没有 apply:

In [12]: pd.to_datetime(df.date).dt.to_period(freq='M')
Out[12]:
0   2019-01
1   2019-02
Name: date, dtype: object

【讨论】:

  • 谢谢。我现在明白我需要将我的数据转换为熊猫日期期间对象。我要使用 datetime 而不是 datetime64 吗?我仍然无法将我的文件数据 (YYYY-MM) 转换为我可以执行操作的时间段对象,例如将日期递增 x 个月等。
  • @max 我认为这取决于你在做什么,通常 datetime64 就足够了。
猜你喜欢
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2022-08-08
  • 1970-01-01
  • 2014-05-15
  • 2021-04-01
相关资源
最近更新 更多