我的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从文件中找到这些丢失的记录?
答案 0 :(得分:4)
让我们尝试pivot
和unstack
:
(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)
您可以使用unstack
和stack(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
参数以使其在这种使用情况下保持准确。