【问题标题】:How to format Jan-2018 i.e how to get the mon-year format in python如何格式化 2018 年 1 月,即如何在 python 中获取 mon-year 格式
【发布时间】:2019-03-18 21:35:54
【问题描述】:

我正在尝试将 pandas 数据框中的列的数据类型从字符串更改为 datetype。我要求的格式是星期一(例如:2018 年 1 月)。我试过了:

dataframe['date_col'] = pd.to_datetime(dataframe['date_col'], format='%b-%Y')

我收到以下警告,我得到的输出格式为年-月-日,类似于 (2018-01-01)。

ma​​in:1:SettingWithCopyWarning:试图在 DataFrame 的切片副本上设置值。尝试使用 .loc[row_indexer,col_indexer] = value 而不是

请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

如何获得我想要的输出格式,即 Jan-2018。

【问题讨论】:

  • 您能否提供前几行数据来重现此问题?例如df.head(5).
  • usd_applicant_dataset['last_pymnt_d'].head(5) Out[25]:0 Jan-2013 1 Apr-2014 2 Jun-2015 3 Jan-2015 4 Jan-2016 名称:last_pymnt_d,dtype:对象,使用后 usd_applicant_dataset['last_pymnt_d'] = pd.to_datetime(usd_applicant_dataset['last_pymnt_d'], format = '%b-%Y')Out[24]: 0 2015-01-01 1 2013-04-01 2 2014-06-01 3 2015-01-01 4 2016-01-01 名称:last_pymnt_d,dtype:datetime64[ns]
  • 您能否将此数据添加到您的问题中(如edit)?在应用pd.to_datetime 之前及之后。

标签: python pandas datetime date-format


【解决方案1】:

datetime 值不存储为字符串!

它们以整数形式在内部存储,并且必须完整:例如,datetime 值必须包含日、月和年。因此,您必须选择以下选项之一:

  1. 使用datetime dtype 存储您的系列,并在显示或打印系列时查看默认表示,即2018-01-01
  2. 使用object dtype 存储您的系列并选择您选择的表示形式。

没有“中介”选项可以两全其美。

选项 1:datetime

只需像现在一样使用pd.to_datetime。这是一个演示:

df = pd.DataFrame({'date_col': ['Jan-2018', 'Oct-2018', 'Dec-2018']})

df['date_col'] = pd.to_datetime(df['date_col'], format='%b-%Y')

print(df, df['date_col'].dtype)

    date_col
0 2018-01-01
1 2018-10-01
2 2018-12-01 datetime64[ns]

选项 2:object

嗯,这正是您输入的内容。没做什么。您的输入格式'%b-%Y'已经是'Jan-2018'的格式。

SettingWithCopyWarning注意事项

此警告与pd.to_datetime 无关。您的 dataframe 很可能是另一个数据帧的模糊切片,因此 Pandas 会显示警告,如果您不明确复制数据帧,您可能会看到意外结果。另见How to deal with SettingWithCopyWarning in Pandas?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多