【发布时间】:2020-07-24 06:13:22
【问题描述】:
我有一个带有日期列的数据框。列包括“自定义”和“通用”数据类型。我想改变它所有的日期时间格式。 “43891”表示“01.03.2020 00:00:00”
TARİH
28.02.2020 00:00:00 -->custom
28.02.2020 00:00:00 -->custom
28.02.2020 00:00:00 -->custom
43891 -->general
43891 -->general
43891 -->general
.
.
这是我在下面尝试过的,我遇到了同样的问题(参考changing all dates to standard date time in dataframe)
import pandas as pd
from datetime import datetime, timedelta
def from_excel_ordinal(ordinal, _epoch0=datetime(1899, 12, 31)):
if ordinal >= 60:
ordinal -= 1 # Excel leap year bug, 1900 is not a leap year!
return (_epoch0 + timedelta(days=ordinal)).replace(microsecond=0)
df = pd.read_excel('D:\Documents\Desktop\deneme/deneme1.xlsx', sheet_name='Sheet1')
m = df['TARİH'].astype(str).str.isdigit()
df.loc[m, 'TARİH'] = \
df.loc[m, 'TARİH']\
.astype(int)\
.apply(from_excel_ordinal)
df['TARİH'] = pd.to_datetime(df['TARİH'], errors='coerce')
df.to_excel('D:\Documents\Desktop\deneme/deneme1.xlsx',index=False)
当我应用这些代码时,我将在下面分享输出。 “常规类型”单元格变为“NaT”。
print(df.loc[3280:3286, 'TARİH'])
Output:
2020-02-28
2020-02-28
2020-02-28
2020-02-28
NaT
NaT
NaT
Name: TARİH, dtype: datetime64[ns]
在此解决方案中,changing all dates to standard date time in dataframe 所有列都是“通用”数据类型。由于这个问题得到解决。但是当我将上述代码应用于我的数据框时,D 列格式正在变成“日期时间”格式。由于第二次运行代码时出现以下错误:
TypeError: cannot astype a datetimelike from [datetime64[ns]] to [int32]
我每天都会使用这些代码。因此,我需要解决格式单元格问题。如果您愿意,我也可以尝试其他方法。
我还有 3000 行。所以我无法应用手动方法。
【问题讨论】:
标签: python excel pandas datetime