【发布时间】:2021-07-21 19:58:44
【问题描述】:
我正在使用 Python 对大量 xlsx 文件(格式相同)进行网络抓取,并将它们合并到一个文件中,以供进一步分析使用
In [206]:
files = glob.glob(path + "/*.xlsx")
df= pd.DataFrame()
df = pd.concat([pd.read_excel(fp, index_col = 0, header = 3).assign(New=os.path.basename(fp)) for fp in files])
df.dtypes
Out[206]:
HVR\n>60 int64
AVG HVR object
Longest HVR datetime64[ns]
AVG HVR 和 Longest HVR 都是持续时间,但 AVG HVR 中的某些字段包含毫秒数,因此对象中的数据类型如下:
Site AVG HVR
Leighton 1900-01-01 00:18:30.080000
Macclesfield 1900-01-01 00:23:09
我需要在 excel 中将它们作为持续时间处理,因此需要将它们转换为 timedelta 格式或以正确格式从 xlsx 导入它们。
我尝试了以下所有方法都无济于事,
df['AVG HVG'] = pd.to_timedelta(df['AVG HVG'])
>>> TypeError: Expected unicode, got Timestamp
>>> ValueError: Invalid type for timedelta scalar: <class 'pandas._libs.tslibs.timestamps.Timestamp'>
datetime.combine(date.min, df['AVG HVG']) - datetime.min
>>> TypeError: combine() argument 2 must be datetime.time, not Series
df['AVG HVG'] = df['AVG HVG'] - datetime.time(1900, 1, 1)
>>> TypeError: descriptor 'time' for 'datetime.datetime' objects doesn't apply to a 'int' object
df['AVG HVR'] = df['AVG HVR'].dt.strftime('%H:%M:%S')
>>> KeyError: 'AVG HVR'
df['AVG HVR\n(HH:MM:SS)'] = df['AVG HVR\n(HH:MM:SS)'].astype('|S19')
【问题讨论】:
标签: python excel pandas datetime timedelta