Rya*_*yan 3 python datetime timestamp date pandas
我正在使用pandas导入数据 dfST = read_csv( ... , parse_dates={'timestamp':[date]})
在我的csv中,日期格式为YYY/MM/DD,这就是我所需要的 - 没有时间.我有几个数据集,我需要比较成员资格.当我将这些'timestamp'转换为字符串时,有时我得到这样的东西:
'1977-07-31T00:00:00.000000000Z'
Run Code Online (Sandbox Code Playgroud)
我理解的是一个日期时间,包括毫秒和时区.有没有办法抑制在导入时增加无关的时间?如果没有,我需要以某种方式排除它.
dfST.timestamp[1]
Out[138]: Timestamp('1977-07-31 00:00:00')
Run Code Online (Sandbox Code Playgroud)
我试过格式化它,这似乎工作,直到我调用格式化的值:
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]
Run Code Online (Sandbox Code Playgroud)
但是没有...当我测试它的价值时我也得到时间:
dfSTdate[1]
Out[124]: Timestamp('1977-07-31 00:00:00')
Run Code Online (Sandbox Code Playgroud)
当我将其转换为数组时,时间包含在毫秒和时区中,这真的会让我的比较变得混乱.
test97=np.array(dfSTdate)
test97[1]
Out[136]: numpy.datetime64('1977-07-30T20:00:00.000000000-0400')
Run Code Online (Sandbox Code Playgroud)
我该怎样摆脱时间?!?最后,我希望比较数据集中的成员资格,使用numpy.in1d日期作为字符串('YYYY-MM-DD')作为比较的一部分
这是由于datetime值存储在pandas中的方式:使用numpy datetime64[ns]dtype.因此,datetime值始终以纳秒分辨率存储.即使您只有一个日期,也会将其转换为零时间纳秒分辨率的时间戳.这只是由于大熊猫的实施.
打印值并产生意外结果的问题只是因为这些对象在python控制台(它们的表示)中的打印方式,而不是它们的实际值.
如果您打印单个值,您将获得Timestamppandas 的表示:
Timestamp('1977-07-31 00:00:00')
Run Code Online (Sandbox Code Playgroud)
所以你也可以在这里获得秒数,因为这是默认表示.
如果将其转换为数组,然后打印它,您将获得标准的numpy表示:
numpy.datetime64('1977-07-30T20:00:00.000000000-0400')
Run Code Online (Sandbox Code Playgroud)
这确实是一种非常误导的表现形式.因为numpy仅用于在控制台中打印它,将其转换为您当地的时区.但这并没有改变你的实际价值,只是奇怪的印刷.
那是背景,现在回答你的问题,我该如何摆脱时间?
这取决于你的目标.你真的想把它转换成字符串吗?或者你只是不喜欢repr?
如果您只想使用日期时间值,则无需删除它.
如果要将其转换为字符串,可以应用strfitme(df['timestamp'].apply(lambda x: x.strftime('%Y-%m-%d'))).或者如果要将其作为字符串写入csv,请使用date_format关键字into_csv
如果你真的想要'日期',你可以datetime.date在DataFrame列中使用类型(标准python类型).您可以将现有列转换为这一带:pd.DatetimeIndex(dfST['timestamp']).date.但我个人认为这没有多大优势.
| 归档时间: |
|
| 查看次数: |
4855 次 |
| 最近记录: |