在下面的问题中,似乎还没有答案。
Read dates from excel to Pandas Dataframe
在欧洲机器上,Pandas在使用欧洲格式(dd-mm-yyyy)从Excel表格中解析日期时有一个令人困惑的错误。日期编号为1-12的日期将自动转换为美国标准(mm-dd-yyyy),日期日期为> 12以欧洲方式解析(dd-mm-yyyy)。这显然会导致问题。
如果'day'和'month'都是<',那么总是有一个解决方案来处理日期并切换它们。 13,但这似乎不是它想象的工作方式。有没有人找到更好的解决方案?提前谢谢!
蟒: '3.4.3 | Anaconda 2.1.0(x86_64)| (默认,2015年10月20日,14:27:51)\ n [GCC 4.2.1(Apple Inc. build 5577)]
熊猫: '0.17.0或更新'
编辑2015年11月17日
自己找到解决方法/解决方案: dayfirst = True to_datetime()
这对我来说似乎仍然是一个错误。我添加了我的代码的简化版本,以提供更多上下文。该脚本读取包含个人数据的excelsheet并转换为创建可用于服务器上载的新工作表。输入可以变化很大,但我简化了示例。
在代码中添加了我的解决方案,并让它生成2个日期输出:一个有一个,一个没有 dayfirst = True
将代码放在两个不同的Excel工作表上。一个没有问题(xlsx文件,例2),另一个(xls,例1)列之间有差异。似乎pandas正确识别日期和月份,但很难从日期创建字符串并在ipython输出中自动混合顺序。
# Module for test list
path = "xxxx"
namefile = "testlist 1.xls"
#namefile = "testlist 2.xlsx"
schoolnaam = 'schoolname'
BRIN = 'XXXX'
meetperiode = 'MPX'
meetjaar = '20xx/20xx'
os.chdir(path)
df = pd.DataFrame()
df = pd.read_excel(namefile,0, header = None, parse_dates = True)
df1 = pd.DataFrame()
df1 = df
df1.columns = ['Leerlingnummer', 'Achternaam', 'Geslacht', 'Blank', 'Leerjaar', 'Gebdatum']
df1 = df1[['Leerlingnummer', 'Achternaam', 'Geslacht', 'Gebdatum']]
# Sheet Leerling
df1.loc[df1['Leerlingnummer'].str.contains('Groep|/|A|B|C|D|E|F|G|H|I|J', na=False), 'Naam groep'] = df1.Leerlingnummer
df1['Naam groep'] = df1['Naam groep'].ffill()
df1.dropna(thresh=5, inplace = True)
df1['Achternaam'] = df1['Achternaam'].str.strip()
df1['Geslacht'] = df1['Geslacht'].str.strip().str.upper()
df1['Naam groep'] = df1['Naam groep'].str.strip()
df1['Voornaam'] = np.nan
df1['Tussenvoegsel'] = np.nan
df1['Geboortedatum']= pd.to_datetime(df1.Gebdatum).apply(lambda x: x.strftime('%d-%m-%Y'))
df1['Geboortedatum2']= pd.to_datetime(df1.Gebdatum, dayfirst=True).apply(lambda x: x.strftime('%d-%m-%Y'))
dfLeerling = df1[['Achternaam','Voornaam','Tussenvoegsel','Geslacht','Geboortedatum','Geboortedatum2','Naam groep']]
# Sheet Groep
gb = df1.groupby('Naam groep')
klaslijst = list(gb.groups)
klaslijst.sort()
dfGroep = pd.DataFrame(data = klaslijst, columns=['Naam groep'])
dfGroep['Lesjaar'] = meetjaar
dfGroep['Naam leraar'] = np.nan
dfGroep['Opmerkingen'] = np.nan
# Sheet School
dfSchool = pd.DataFrame({'BRIN': BRIN, 'Naam school': schoolnaam, 'Adres':[np.nan], 'Postcode':[np.nan], 'Plaats':[np.nan],
'Telefoon':[np.nan], 'Email':[np.nan], 'Website':[np.nan]})
dfSchool = dfSchool[['BRIN','Naam school','Adres','Postcode','Plaats','Telefoon','Email','Website']]
# Writer
namefile2 = 'Final list %s %s.xlsx' % (schoolnaam, meetperiode)
writer = pd.ExcelWriter(namefile2)
dfSchool.to_excel(writer, 'School', index=False)
dfGroep.to_excel(writer, 'Groep', index=False)
dfLeerling.to_excel(writer, 'Leerling', index=False)
writer.save()
dfLeerling.head()