如何查找包含日期值的数据框行?

2024-06-02 22:07:52 发布

您现在位置:Python中文网/ 问答频道 /正文

有一个巨大的数据框,在不同的列中包含多种数据类型。我想在不同的列中查找包含日期值的行。 这里有一个测试数据帧:

   dt = pd.Series(['abc', datetime.now(), 12, '', None, np.nan, '2020-05-05'])
   dt1 = pd.Series([3, datetime.now(), 'sam', '', np.nan, 'abc-123', '2020-05-25'])
   dt3 = pd.Series([1,2,3,4,5,6,7])
   df = pd.DataFrame({"A":dt.values, "B":dt1.values, "C":dt3.values})

现在,我想创建一个新的数据框,它只包含a列和B列中的日期,这里是第2行和最后一行。
预期产出:

                            A                           B  C
1  2020-06-01 16:58:17.274311  2020-06-01 17:13:20.391394  2
6                  2020-05-05                  2020-05-25  7

最好的方法是什么?谢谢

p.S.>;日期可以是任何标准格式


Tags: 数据nonedatetimenpdtnannowseries
3条回答

仅测试A,B列的解决方案是^{}^{}^{}不匹配任何非日期时间:

df = df[df[['A','B']].apply(pd.to_datetime, errors='coerce').notna().all(axis=1)]

print (df)
                            A                           B  C
1  2020-06-01 16:14:35.020855  2020-06-01 16:14:35.021855  2
6                  2020-05-05                  2020-05-25  7
import pandas as pd
from datetime import datetime

dt = pd.Series(['abc', datetime.now(), 12, '', None, np.nan, '2020-05-05'])
dt1 = pd.Series([3, datetime.now(), 'sam', '', np.nan, 'abc-123', '2020-05-25'])
dt3 = pd.Series([1,2,3,4,5,6,7])
df = pd.DataFrame({"A":dt.values, "B":dt1.values, "C":dt3.values})

m = pd.concat([pd.to_datetime(df['A'], errors='coerce'),
               pd.to_datetime(df['B'], errors='coerce')], axis=1).isna().all(axis=1)

print(df[~m])

印刷品:

                            A                           B  C
1  2020-06-01 12:17:51.320286  2020-06-01 12:17:51.320826  2
6                  2020-05-05                  2020-05-25  7

使用:

m = df[['A', 'B']].transform(pd.to_datetime, errors='coerce').isna().any(axis=1)   
df = df[~m]

结果:

# print(df)
                            A                           B  C
1  2020-06-01 17:54:16.377722  2020-06-01 17:54:16.378432  2
6                  2020-05-05                  2020-05-25  7

相关问题 更多 >