熊猫区分“日期”和“字符串”列均为“对象”类型

时间:2020-07-28 21:46:07

标签: python pandas dataframe validation datetime

这似乎是一个直截了当的问题,但现在我已经坚持了一段时间。抱歉,如果已经有人问过这个问题。我有以下熊猫数据框:

import pandas as pd
zed = pd.DataFrame({'gameDate': {0: datetime.date(2019, 12, 12),
  1: datetime.date(2019, 12, 12),
  2: datetime.date(2019, 12, 12),
  3: datetime.date(2019, 12, 12),
  4: datetime.date(2019, 12, 12)},
 'periodType': {0: 'REGULAR',
  1: 'REGULAR',
  2: 'REGULAR',
  3: 'REGULAR',
  4: 'REGULAR'}})

,当我查看该数据帧的dtypes时,得到以下输出:

print(zed.dtypes)

gameDate      object
periodType    object
dtype: object

当两者都返回为date时,如何将string类型与object类型区分开?我有一个更大的数据框,我需要标识所有类型为date的列(不是datetimetimestamp,而仅是date,如上所述),但是我不特别知道列名。我想使用类似.dtypes函数的方法来帮助显示这些列。

我可以创建一个函数来测试字符串是否为yyyy-mm-dd格式,但这似乎很乏味。

谢谢!

1 个答案:

答案 0 :(得分:1)

您有两个选择:

1-在构建“ gameDate”字典时使用pd.datetime,如下所示:

zed = pd.DataFrame(
    {'gameDate': {
        0: pd.datetime(2019, 12, 12),
        1: pd.datetime (2019, 12, 12),
        2: pd.datetime(2019, 12, 12),
        3: pd.datetime(2019, 12, 12),
        4: pd.datetime(2019, 12, 12)
    },
     'periodType': {
         0: 'REGULAR',
         1: 'REGULAR',
         2: 'REGULAR',
         3: 'REGULAR',
         4: 'REGULAR'
     }
    }
)
  • pd.datetime 已被弃用,以后会从熊猫中删除。

2-声明数据框后转换列(可能是最佳实践)。只需使用:

zed = pd.DataFrame(
    {'gameDate': {
        0: datetime.date(2019, 12, 12),
        1: datetime.date(2019, 12, 12),
        2: datetime.date(2019, 12, 12),
        3: datetime.date(2019, 12, 12),
        4: datetime.date(2019, 12, 12)
    },
    'periodType': {
        0: 'REGULAR',
        1: 'REGULAR',
        2: 'REGULAR',
        3: 'REGULAR',
        4: 'REGULAR'
    }
   }
)

zed['gameDate'] = pd.to_datetime(zed['gameDate'])