在使用concat然后使用isin删除所有行时,遇到:
ValueError:无法计算具有重复轴的isin。
同时,如果DF中还有任何行,则没有问题。同样,在任何情况下都不使用concat可以正常工作,可以正常返回一个空DF。我正在尝试使用concat,因为在我的用例中它会更快一些。
熊猫0.24.2(最新)。
df = pd.DataFrame()
for r in range(5):
df = df.append({'type':'teine', 'id':r}, ignore_index=True)
# Problem line
df = pd.concat([df.reset_index(drop=True), pd.DataFrame({'type':'teine', 'id':5}, index=[0])], sort=True)
dfCopy = df.copy()
df.query("(type == 'teine')", inplace=True)
df = dfCopy[~dfCopy.isin(df).all(axis=1)]
答案 0 :(得分:2)
在该行中:
df = pd.concat([df.reset_index(drop=True), pd.DataFrame({'type':'teine', 'id':5}, index=[0])], sort=True)
无需重置concat(df.reset_index(drop=True)
)内部的索引。但是您必须在concat之后重设索引以避免错误。看起来是这样的:
df = pd.concat([df, pd.DataFrame({'type':'teine', 'id':5}, index=[0])], sort=True).reset_index(drop=True)
答案 1 :(得分:1)
您可以避免不重复索引的问题:
df = pd.DataFrame()
for r in range(5):
df = df.append({'type':'teine', 'id':r}, ignore_index=True)
# Problem line
df = pd.concat([df.reset_index(drop=True), pd.DataFrame({'type':'teine', 'id':5}, index=[max(df.index.values)+1])], sort=True)
dfCopy = df.copy()
df.query("(type == 'teine')", inplace=True)
df = dfCopy[~dfCopy.isin(df).all(axis=1)]
或者更好的是,您可以在串联后重置索引:
df = pd.DataFrame()
for r in range(5):
df = df.append({'type':'teine', 'id':r}, ignore_index=True)
# Problem line
df = pd.concat([df, pd.DataFrame({'type':'teine', 'id':5}, index=[0])], sort=True).reset_index(drop=True)
dfCopy = df.copy()
df.query("(type == 'teine')", inplace=True)
df = dfCopy[~dfCopy.isin(df).all(axis=1)]