熊猫,删除日期时间NaT并替换为无,“ str”对象没有属性“ strftime”

时间:2019-12-14 19:59:04

标签: python pandas

我使用以下方法将日期从yyyymmdd转换为yyyy-mm-dd hh:mm:ss:

d7['date'] = pd.to_datetime(d7['date'], format='%Y%m%d', errors='coerce').dt.strftime('%Y-%m-%d %H:%M:%S.%f')

但是我遇到错误AttributeError: 'str' object has no attribute 'strftime'

我尝试实现此Remove dtype datetime NaT,但很难将其与上面的格式结合使用。

我的日期列中的日期不正确,例如2028-01-31 00:00:00.000000NaT,我想改用NaT空格或None

示例数据框:

2019-11-01 00:00:00.000000

2019-11-01 00:00:00.000000

2019-11-01 00:00:00.000000

2019-11-04 00:00:00.000000

2019-11-01 00:00:00.000000

2019-11-01 00:00:00.000000

2019-11-01 00:00:00.000000

2019-11-01 00:00:00.000000

2019-11-01 00:00:00.000000

NaT

谢谢。

1 个答案:

答案 0 :(得分:0)

  • “我正在将日期从yyyymmdd转换为yyyy-mm-dd hh:mm:ss”,因此20180101是初始日期格式的示例。
  • Remove dtype datetime NaT 期望日期时间格式,但是pd.to_datetime(d7['date'], format='%Y%m%d', errors='coerce').dt.strftime('%Y-%m-%d %H:%M:%S.%f')创建一个字符串。
import pandas as pd

# sample data
df = pd.DataFrame({'date': ['20180101', '', '20190101']})

# df view
       date
0  20180101
1          
2  20190101

# convert to datetime format
df.date = pd.to_datetime(df.date, format='%Y%m%d', errors='coerce')

# df view
        date
0 2018-01-01
1        NaT
2 2019-01-01

# apply method from link
# use None if you want NoneType.  If you want a string, use 'None'
df.date = df.date.apply(lambda x: x.strftime('%Y-%m-%d %H:%M:%S') if not pd.isnull(x) else None)

# final output
                  date
0  2018-01-01 00:00:00
1                 None
2  2019-01-01 00:00:00

要查找问题行,请尝试以下代码。

  • 该函数将返回strNone或打印任何导致AttributeError的“日期”行
df = pd.DataFrame({'date': ['20180101', '', '20190101', 'abcd', 3456]})
df.date = pd.to_datetime(df.date, format='%Y%m%d', errors='coerce')

# convert from datetime format to string format
def convert(x) -> (str, None):
    try:
        return x.strftime('%Y-%m-%d %H:%M:%S') if not pd.isnull(x) else None
    except AttributeError:
        return None
        print(x)      

# apply the function
df.date = df.date.apply(lambda x: convert(x))

# output df
                  date
0  2018-01-01 00:00:00
1                 None
2  2019-01-01 00:00:00
3                 None
4                 None