我有一个Excel文件,其中的列名为StartTime
,具有hh:mm:ss XX
数据,并且单元格采用“ h:mm:ss AM / FM”自定义格式。例如,
ID StartTime
1 12:00:00 PM
2 1:00:00 PM
3 2:00:00 PM
我使用以下代码读取文件
df = pd.read_excel('./mydata.xls',
sheet_name='Sheet1',
converters={'StartTime' : str},
)
df
显示
ID StartTime
1 12:00:00
2 1:00:00
3 2:00:00
是一个错误还是您如何克服这个问题?谢谢。
[更新:2018年12月7日]
我想我可能已经对Excel文件进行了更改,使其变得很奇怪。我创建了另一个Excel文件并显示在此处(我无法在此处附加Excel文件,它也不安全):
我创建了以下代码进行测试:
import pandas as pd
df = pd.read_excel('./Book1.xlsx',
sheet_name='Sheet1',
converters={'StartTime': str,
'EndTime': str
}
)
df['Hours1'] = pd.NaT
df['Hours2'] = pd.NaT
print(df,'\n')
df.loc[~df.StartTime.isnull() & ~df.EndTime.isnull(),
'Hours1'] = pd.to_datetime(df.EndTime) - pd.to_datetime(df.StartTime)
df['Hours2'] = pd.to_datetime(df.EndTime) - pd.to_datetime(df.StartTime)
print(df)
输出是
ID StartTime EndTime Hours1 Hours2
0 0 11:00:00 12:00:00 NaT NaT
1 1 12:00:00 13:00:00 NaT NaT
2 2 13:00:00 14:00:00 NaT NaT
3 3 NaN NaN NaT NaT
4 4 14:00:00 NaN NaT NaT
ID StartTime EndTime Hours1 Hours2
0 0 11:00:00 12:00:00 3600000000000 01:00:00
1 1 12:00:00 13:00:00 3600000000000 01:00:00
2 2 13:00:00 14:00:00 3600000000000 01:00:00
3 3 NaN NaN NaT NaT
4 4 14:00:00 NaN NaT NaT
现在问题变成了:“在Microsoft Excel中,使用熊猫从2个“ hh:mm:ss XX”列中执行时间增量”。我也更改了问题的标题。谢谢那些回答并尝试过的人。
问题是 如何将时间值表示为小时而不是微秒?
答案 0 :(得分:1)
似乎StartTime
列的格式设置为文件中的文本。
您是否尝试过使用parse_dates
以及通过date_parser
参数指定的解析器函数来读取它?尽管文档并未明确列出上述选项read_csv()
,但其工作方式应类似于despite them being available。
像这样:
pd.read_excel(r'./mydata.xls',
parse_dates=['StartTime'],
date_parser=lambda x: pd.datetime.strptime(x, '%I:%M:%S %p').time())
提供更新:
pd.read_excel(r'./mydata.xls', parse_dates=['StartTime', 'EndTime'])
(df['EndTime'] - df['StartTime']).dt.seconds//3600
或者
# '//' is available since pandas v0.23.4, otherwise use '/' and round
(df['EndTime'] - df['StartTime'])//pd.Timedelta(1, 'h')
两者都相同
0 1
1 1
2 1
dtype: int64