python - Pandas - 使用 read_csv 读取时间

标签 python pandas csv datetime

我需要读取一个 csv 文件,其中一列以 HH:MM:SS 格式存储一天中的时间。我需要与这些时间进行比较,所以我的想法是使用日期时间。日期信息不相关也不存在于文件中。

如果我读取文件并像这样解析日期:

import pandas as pd    
dateparse = lambda x: pd.datetime.strptime(x, '%H:%M:%S')
my_data = pd.read_csv(file_name, parse_dates=['Time'], date_parser=dateparse)
print(my_data.loc[0]['Time'])

我得到 1900-01-01 11:03:41。如何去掉日期和年份?我不需要它,也不会在我的输出文件中需要它。
有没有办法将此列读取为 datetime.time 格式?

我也尝试过:

my_data = pd.read_csv(file_name, parse_dates=['Time'], 
                     date_parser=lambda x: pd.to_datetime(x, format='%H:%M:%S'))

结果相同。

最佳答案

如果您只想将输出修改为 csv,您可以在 to_csv 中指定 date_format:

In[130]:    
df = pd.DataFrame({'date':[pd.datetime.strptime('11:03:41', '%H:%M:%S')]})
df.to_csv(date_format='%H:%M:%S')

Out[130]: ',date\n0,11:03:41\n'

我建议将您的数据保留为datetime64,因为它允许您在列上执行矢量化算术,如果您存储为datetime.time对象,那么它会限制什么你可以做

您始终可以添加一个附加列作为 datetime.timestr 表示形式:

In[131]:
df['time'] = df['date'].dt.time
df['str_rep'] = df['date'].dt.strftime('%H:%M:%S')
df

Out[131]: 
                 date      time   str_rep
0 1900-01-01 11:03:41  11:03:41  11:03:41

为了证明我的观点:

In[136]:

df = pd.DataFrame({'date':pd.to_datetime(['11:03:41', '15:23:33'], format='%H:%M:%S').time})
df
Out[136]: 
       date
0  11:03:41
1  15:23:33

现在如果我们执行算术:

df['date'].diff()

这将提高:

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

虽然如果我们将dtype保留为datetime64,我们仍然可以执行算术和比较,因为日期都是相同的,它们无论如何都会抵消,具体取决于您的情况做:

In[138]:
df = pd.DataFrame({'date':pd.to_datetime(['11:03:41', '15:23:33'], format='%H:%M:%S')})
df

Out[138]: 
                 date
0 1900-01-01 11:03:41
1 1900-01-01 15:23:33

In[139]:
df.diff()

Out[139]: 
      date
0      NaT
1 04:19:52

更新

如果您确实想要datetime.time,那么您可以修改您的lambda:

dateparse = lambda x: pd.datetime.strptime(x, '%H:%M:%S').time()
my_data = pd.read_csv(file_name, parse_dates=['Time'], date_parser=dateparse)

或者这也可以:

my_data = pd.read_csv(file_name, parse_dates=['Time'], 
                     date_parser=lambda x: pd.to_datetime(x, format='%H:%M:%S').time())

比较和一些算术运算可以工作,但它不如 native datetime64 数据类型灵活。

关于python - Pandas - 使用 read_csv 读取时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50703425/

相关文章:

python - 如何在列表中运行我的标记器函数 - 模块对象不可调用?

python - 何时使用 new.instancemethod 与将方法分配给类

python - 从 python27 中的文件夹导入模块

python - 属性错误 : 'str' object has no attribute 'strftime' when modifying pandas dataframe

python - 使用os.walk读取多个输入文件,以及GetMessage进度更新消息

javascript - 如何使用queuejs和d3js并行加载30个csv文件?

sql - Redshift SQL - 反向 Listagg 函数

python - 使用 Python 进行抓取。无法获取想要的数据

c++ - 如何在 Linux 中从 Python 代码调用 C++ 函数?

python - 将 pandas 中的长列排列成多个较短的列