pandas校验某一列是否是时间类型,并提取出不是时间类型的cell

10 篇文章 0 订阅
  1. 安装pandas
pip install pandas
  1. 制作一个demo excel
    在这里插入图片描述
  2. 检验b 列是否是datetime
from datetime import datetime
import pandas as pd
import requests
from pandas.api.types import is_datetime64_any_dtype
with open(r'C:\Users\84977\Desktop\test\2.xlsx',mode='rb') as file:
    order_dict = pd.read_excel(file.read(),sheet_name=None,usecols=['a','b','c','d'])
    vv = {}
    for sheet_name, df in order_dict.items():
        # print(sheet_name)
        # print(list(df.columns))
        # print(df.isnull())
        # 获取为空的行
        nan_rows  = df[df.isnull().any(axis=1)]
        v1 = set(nan_rows.index)
        v2 = set(df[~df['d'].isin(['是','否'])].index)
        
        vv = v1|v2
        is_datetime_column = is_datetime64_any_dtype(df["b"])
        # True 表示是datetime列,否则不是
        print(is_datetime_column)
    print(vv)

  1. 获取不是datetime的cell所在的行
from datetime import datetime
import numpy as np
import pandas as pd
import requests
from pandas.api.types import is_datetime64_any_dtype

def indexes(iterable, obj):
    return (index for index, elem in enumerate(iterable) if elem == obj)


with open(r'C:\Users\84977\Desktop\test\2.xlsx',mode='rb') as file:
    order_dict = pd.read_excel(file.read(),sheet_name=None,usecols=['a','b','c','d'])
    vv = {}
    for sheet_name, df in order_dict.items():
        # print(sheet_name)
        # print(list(df.columns))
        # print(df.isnull())
        nan_rows  = df[df.isnull().any(axis=1)]
        
        # print(df.shape[0])
        # print(df.shape[1])
        # print(nan_rows)
        v1 = set(nan_rows.index)
        v2 = set(df[~df['d'].isin(['是','否'])].index)
        
        vv = v1|v2
        # print(vv)
        
        m = df['b'].apply(lambda v: isinstance(v, datetime))
        print(m.values)
        # 获取为FALSE的索引,即代表这个单元格所在的行
        idxs = indexes(list(m.values), False)
        print(list(idxs))
        
        
        ddd = pd.to_datetime(np.where(m, df['b'].astype(str), np.NaN))
        
        print(ddd.isnull())
        
        idxs = indexes(list(ddd.isnull()), True)

        vvvv = list(idxs)
        
        
        for index,item in enumerate(ddd):
            if index not in vvvv:
                print(item.strftime('%Y-%m'))


    print(vv)

https://stackoverflow.com/questions/43214204/how-do-i-tell-if-a-column-in-a-pandas-dataframe-is-of-type-datetime-how-do-i-te

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值