【问题标题】:Pandas: select rows with column datatypePandas:选择具有列数据类型的行
【发布时间】:2020-04-13 19:55:48
【问题描述】:

我有一个 DataFrame,其中时间戳列包含混合类型。有些行以 Unix 时间戳(数字)报告时间,有些行以 iso 格式字符串报告时间,其余行以 Pandas 日期时间对象报告。

有没有办法让我选择时间戳列中包含非日期时间对象的所有行?我想运行 pd.to_datetime 将这些行的时间戳列转换为日期时间对象。

内置的select_dtypes 不符合我的要求。此库函数选择(不)具有特定类型的列,但我想选择给定列值是(不是)特定类型的行。

例子:

df = pd.DataFrame({
    'time': [
        Timestamp('2019-03-31 00:00:00-0400', tz='US/Eastern'),
        '2019-01-31 12:00:00-0700',
        1551000000
    ] })

目标:

def get_not_datetime_rows(df):
    """Output the last two rows."""

【问题讨论】:

  • 你能提供一个最小的例子吗?
  • 在上面添加了一个例子。

标签: python pandas datetime


【解决方案1】:

这样的事情怎么样(假设 df 是您的 DataFrame 并且“时间戳”是有问题的列)?

from datetime import datetime
idx = df["Timestamp"].apply(lambda x: type(x) != datetime)

然后使用idx 分割你的DataFrame

【讨论】:

  • 有没有办法在不使用 apply 的情况下做到这一点?我的数据框有数百万行,并且应用通常比基于索引或切片的方法慢得多。
  • @charmander123:你可以像这样使用列表推导:idx = [type(x) == datetime for x in df['Timestamp'].values]我对一百万行的 DataFrame 的粗略测试表明它比 apply 快约 30%。
猜你喜欢
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 2022-12-15
  • 2019-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-04
相关资源
最近更新 更多