如何使用熊猫在csv中查找丢失的行?

时间:2020-09-29 17:21:13

标签: python pandas numpy

我的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

如您所见,堪萨斯州缺少10/10/20-10/17/20,坦帕缺少10/10和12/26的2条记录。有没有办法使用Pandas和python从文件中找到这些丢失的记录?

2 个答案:

答案 0 :(得分:4)

让我们尝试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]

答案 1 :(得分:3)

您可以使用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

基本上,您正在为所有StartDate和所有location制作一个方阵。当您unstack时,如果行/列标签的组合不在数据框中,则熊猫会放置NaN。然后,当您stack缺省情况下,大熊猫将那些NaN丢弃时,但是您可以传递dropna参数以使其在这种使用情况下保持准确。