如何使用Pandas查找csv中丢失的行



我的CSV文件看起来像这个

location StartDate EndDate
Austin  10/24/20. 10/31/20
Austin  11/28/20. 12/05/20
Austin  12/26/20. 01/02/21
Austin  10/10/20  10/17/20
Austin  10/03/20. 10/10/20
Kansas  10/24/20. 10/31/20
Kansas  11/28/20. 12/05/20
Kansas  12/26/20. 01/02/21
Kansas  10/03/20. 10/10/20
Tampa   10/24/20. 10/31/20
Tampa   11/28/20. 12/05/20
Tampa   10/03/20. 10/10/20

正如你所看到的,堪萨斯州在2020年10月10日至2017年10月17日期间错失了两项记录,坦帕州在10月和12月26日期间错失两项记录。有没有办法使用Pandas和python从文件中找到这些丢失的记录?

让我们试试pivotunstack:

(df.pivot(*df)
.stack(dropna=False)
.loc[lambda x: x.isna()]
)

输出:

location  StartDate 
Kansas    2020-10-10   NaT
Tampa     2020-10-10   NaT
2020-12-26   NaT
dtype: datetime64[ns]

您可以使用unstackstack(dropna=False)

df = df.groupby(['StartDate', 'EndDate', 'location']).size().unstack()
df = df.stack(dropna=False).rename('count').reset_index()
missing = df[df['count'].isna()]

输出

print(missing)
StartDate   EndDate location  count
4    10/10/20  10/17/20   Kansas    NaN
5    10/10/20  10/17/20    Tampa    NaN
14  12/26/20.  01/02/21    Tampa    NaN

基本上,你正在为所有的StartDatelocation做一个平方矩阵。当unstack时,如果行/列标签的组合不在数据帧中,panda将放置NaN。然后,当您的stackpanda在默认情况下删除这些NaN时,但您可以传递dropna参数来为这个用例保留它们。

最新更新