我正在使用带有以下代码的熊猫将多个excel文件合并在一起。我在“时间”列中转换时间时遇到问题。每个电子表格的格式都不同,有些电子表格的时间为字符串“ 0900”,有些电子表格的时间为9:00。我需要它们全部为字符串或全部为时间。
我尝试了以下代码:
df_merge.assign(newtime = pd.to_datetime(df_merge.time).dt.time)
这会将字符串“ 0900”的值转换为9:00,但是将所有9:00的时间值都丢弃到NaN的...在这里如何处理数据类型的差异?
df_merge = pd.DataFrame()
for f in os.listdir(path):
try:
df = pd.read_excel(path+"/"+f, header = None, skiprows = 1,
names = ['sys_name','sys_no', 'date','time',
'location','collected_by','date_set','date_comp',
'smpl_type','total','fecal','cl_res','comment','lab_no'],
dtype = {'time':str})
if len(df.columns) != 14:
print(f, "is not formatted properly. It has", len(df.columns), "row(s) when it should have 14.")
else:
df_merge = df_merge.append(df, ignore_index=True)
except Exception as e:
print(e)
我还尝试将列转换为字符串并使用dateutil.parser进行解析:
df_merge['time'].apply(lambda x: parse(str(x)))
但是对于格式为“ 0900”的行,我得到了1325-02-22 00:00:00
时间是该日期时间中的年份。
答案 0 :(得分:0)
当我想将日期时间转换为str时,我将使用转换器而不是dtypes:
df = pd.read_excel(path+"/"+f, header = None, skiprows = 1,
names = ['sys_name','sys_no', 'date','time',
'location','collected_by','date_set','date_comp',
'smpl_type','total','fecal','cl_res','comment','lab_no'],
converters={'time': str})