153 python csv datetime series pandas
我pandas.to_datetime用来解析数据中的日期.Pandas默认表示日期,datetime64[ns]即使日期仅为每日日期.我想知道是否有一种优雅/巧妙的方式将日期转换为datetime.date或者datetime64[D]当我将数据写入CSV时,日期不会附加00:00:00.我知道我可以逐个元素地手动转换类型:
[dt.to_datetime().date() for dt in df.dates]
Run Code Online (Sandbox Code Playgroud)
但这真的很慢,因为我有很多行,这有点挫败了使用的目的pandas.to_datetime.有没有办法立即转换dtype整个列?或者,是否pandas.to_datetime支持精度规范,以便在处理日常数据时可以摆脱时间部分?
EdC*_*ica 212
从版本开始,0.15.0现在.dt只需访问日期组件即可轻松完成:
df['just_date'] = df['dates'].dt.date
Run Code Online (Sandbox Code Playgroud)
上面返回一个datetime.datedtype,如果你想拥有一个datetime64那么你可以只normalize将时间组件设置为午夜,所以它将所有值设置为00:00:00:
df['normalised_date'] = df['dates'].dt.normalize()
Run Code Online (Sandbox Code Playgroud)
这样可以保持dtype,datetime64但显示只显示date值.
Pie*_*ton 23
虽然我赞同EdChum的答案,这是对OP提出的问题的最直接的答案,但它并没有真正解决性能问题(它仍然依赖于python datetime对象,因此对它们的任何操作都不会被矢量化 - 也就是说,它会很慢).
更好的替代方案是使用df['dates'].dt.floor('d').严格地说,它不是"仅保留日期部分",因为它只是设置时间00:00:00.但它确实可以通过OP工作,例如:
groupby...而且效率更高,因为操作是矢量化的.
编辑:其实,在OP的宁愿答案很可能是"的最新版本pandas也没有写入到csv,如果它是时间00:00:00的所有观测值".
Pal*_*ine 18
df['Column'] = df['Column'].dt.strftime('%m/%d/%Y')
Run Code Online (Sandbox Code Playgroud)
这只会为您提供所需格式的日期,而不是时间。您可以根据需要更改格式'%m/%d/%Y'。它将把列的数据类型更改为'object'.
如果您只想要日期而不想要时间格式,YYYY-MM-DD请使用:
df['Column'] = pd.to_datetime(df['Column']).dt.date
Run Code Online (Sandbox Code Playgroud)
数据类型将为'object'.
对于'datetime64'数据类型,请使用:
df['Column'] = pd.to_datetime(df['Column']).dt.normalize()
Run Code Online (Sandbox Code Playgroud)
Gil*_*gio 13
简单的解决方案:
df['date_only'] = df['date_time_column'].dt.date
Run Code Online (Sandbox Code Playgroud)
Kat*_*rin 10
只是给出一个更新的答案,以防有人看到这个旧帖子。
在转换为 datetime 时添加“utc=False”将删除时区组件并仅保留 datetime64[ns] 数据类型的日期。
pd.to_datetime(df['Date'], utc=False)
Run Code Online (Sandbox Code Playgroud)
您将能够将其保存在 excel 中而不会出现错误“ValueError:Excel 不支持带时区的日期时间。在写入 Excel 之前,请确保日期时间是不知道时区的。”
to_csv与date_format参数一起使用尽可能避免将您的datetime64[ns]系列转换为objectdtype系列的datetime.date对象。后者通常使用构造pd.Series.dt.date,存储为指针数组,相对于基于NumPy的纯序列而言效率低下。
由于在写入CSV时您担心的是格式问题,因此只需使用date_format参数即可to_csv。例如:
df.to_csv(filename, date_format='%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)
有关格式设置约定,请参见Python的strftime指令。
这是提取日期的简单方法:
import pandas as pd
d='2015-01-08 22:44:09'
date=pd.to_datetime(d).date()
print(date)
Run Code Online (Sandbox Code Playgroud)
转换为datetime64[D]:
df.dates.values.astype('M8[D]')
Run Code Online (Sandbox Code Playgroud)
尽管将其重新分配给DataFrame col会将其恢复为[ns]。
如果您想要实际的datetime.date:
dt = pd.DatetimeIndex(df.dates)
dates = np.array([datetime.date(*date_tuple) for date_tuple in zip(dt.year, dt.month, dt.day)])
Run Code Online (Sandbox Code Playgroud)
我希望能够更改数据框中一组列的类型,然后删除保留一天的时间。round(), floor(), ceil()都有效
df[date_columns] = df[date_columns].apply(pd.to_datetime)
df[date_columns] = df[date_columns].apply(lambda t: t.dt.floor('d'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
227216 次 |
| 最近记录: |