gpt4 book ai didi

python - 在 Pandas 中处理日期 - 删除日期时间中看不见的字符并转换为字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:43:16 36 4
gpt4 key购买 nike

我正在使用 pandas 导入数据 dfST = read_csv( ... , parse_dates={'timestamp':[date]})在我的 csv 中,日期的格式是 YYY/MM/DD,这就是我所需要的——没有时间。我有几个数据集需要比较成员资格。当我将这些“时间戳”转换为字符串时,有时我会得到这样的结果:

'1977-07-31T00:00:00.000000000Z'

据我所知,这是一个日期时间,包括毫秒和时区。有什么办法可以抑制在导入时添加额外时间吗?如果不是,我需要以某种方式将其排除。

dfST.timestamp[1]
Out[138]: Timestamp('1977-07-31 00:00:00')

我试过格式化它,在我调用格式化值之前这似乎有效:

dfSTdate=pd.to_datetime(dfST.timestamp, format="%Y-%m-%d")  
dfSTdate.head()
Out[123]:
0 1977-07-31
1 1977-07-31
Name: timestamp, dtype: datetime64[ns]

但是不......当我测试这个值时我也得到了时间:

dfSTdate[1]
Out[124]: Timestamp('1977-07-31 00:00:00')

当我将其转换为数组时,时间包含在毫秒和时区中,这确实打乱了我的比较。

test97=np.array(dfSTdate)
test97[1]
Out[136]: numpy.datetime64('1977-07-30T20:00:00.000000000-0400')

我怎样才能摆脱时间?!?最后,我希望使用 numpy.in1d 将日期作为字符串 ('YYYY-MM-DD') 作为比较的一部分来比较数据集之间的成员资格

最佳答案

这是由于 datetime 值在 pandas 中的存储方式:使用 numpy datetime64[ns] dtype。因此,日期时间值始终以纳秒分辨率存储。即使您只有一个日期,它也会被转换为具有纳秒分辨率的零时间的时间戳。这只是由于在 pandas 中的实现。

打印值和意外结果的问题只是因为这些对象在 python 控制台中的打印方式(它们的表示),而不是它们的实际值。
如果您打印单个值,您将获得 pandas 的 Timestamp 表示:

Timestamp('1977-07-31 00:00:00')

所以你在这里也得到了秒数,只是因为这是默认表示。
如果将其转换为数组,然后打印它,您将获得标准的 numpy 表示形式:

numpy.datetime64('1977-07-30T20:00:00.000000000-0400')

这确实是一个非常具有误导性的陈述。因为 numpy 会将其转换为您本地的时区,只是为了在控制台中打印它。但这并没有改变你的实际值(value),它只是奇怪的打印。


背景介绍完了,现在回答你的问题,时间怎么去掉?
这取决于你的目标。你真的想把它转换成字符串吗?还是您只是不喜欢该代表?

  • 如果您只想使用日期时间值,则不需要摆脱它。

  • 如果你想把它转换成字符串,你可以应用strfitme (df['timestamp'].apply(lambda x: x.strftime('%Y- %m-%d'))).或者如果是将其作为字符串写入csv,使用to_csv

  • 中的 date_format关键字
  • 如果您确实需要“日期”,可以在 DataFrame 列中使用 datetime.date 类型(标准 python 类型)。您可以使用以下方法将现有列转换为此:pd.DatetimeIndex(dfST['timestamp']).date。但我个人认为这没有太多优势。

关于python - 在 Pandas 中处理日期 - 删除日期时间中看不见的字符并转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25653220/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com