我有一张很大的数据。当我运行:df=df.drop_duplicates()时,我得到以下错误:
ValueError: Buffer has wrong number of dimensions (expected 1, got 2)如果我运行一个df.loc[:10].drop_duplicates(),它已经有错误了
有人知道是什么导致的吗?
编辑
dataframe如下所示:
Razao_social Razao_social \
business_id
17 MULTIGRAIN S.A. Sao Paulo
17 MULTIGRAIN S.A. Sao Paulo
17 MULTIGRAIN S.A. Sao Paulo
17 MULTIGRAIN S.A. Sao Paulo
17 MULTIGRAIN S.A. Sao Paulo
17 MULTIGRAIN S.A. Sao Paulo
38 BRASILAGRO - COMPANHIA BRASILEIRA DE PROPRIEDA... Sao Paulo
38 BRASILAGRO - COMPANHIA BRASILEIRA DE PROPRIEDA... Sao Paulo
71 SECURITAS GARANTIAS S.A. Sao Paulo
71 SECURITAS GARANTIAS S.A. Sao Paulo
71 SECURITAS GARANTIAS S.A. Sao Paulo
71 SECURITAS GARANTIAS S.A. Sao Paulo 发布于 2017-08-23 22:02:45
在不了解更多数据的情况下,我要给出一些一般性的想法:-熊猫0.18 (https://github.com/pandas-dev/pandas/issues/13393)中有一个已知的错误,它导致了包含datetime64数据类型的MultiIndexes的缓冲区值错误。是这种类型的列之一吗?-您的列中是否有重复的名称?我知道这是不应该发生的,但事实确实如此。-您需要在所有列中查找重复项,还是列的子集就足够了?尝试在方法调用中使用subset=选项。
Vico的答案可能会很有帮助,但是对于一个非常大的dataframe,对初始数据和删除重复的数据进行转置可能会比分配的资源更多。
发布于 2018-11-08 12:50:29
另一种解决这个问题的方法是稀疏列.请参阅下面的错误:
n = 10000
df = pd.DataFrame({'a': np.random.choice(n*2, n),
'b': np.random.choice(10, n),
'c': np.random.choice(4, n),
'd': np.random.choice(int(n/2), n),
'e': np.random.choice(int(n/100), n)})
df_dummies = pd.get_dummies(df, columns=['b', 'c'], sparse=True)
df_dummies.drop_duplicates()奇怪的是,df_dummies.to_dense()解决不了你的问题--用sparse=False来重新创建你的假人。
为了检查重复列(其他答案所建议的问题),您可以使用以下代码片段:
df.columns.duplicated()发布于 2018-12-19 00:53:49
我在非常大的dataframe中遇到了同样的问题,然后通过创建临时列来解决这个问题,该列将所有键列连接在一个字符串中,然后根据该唯一添加的列删除重复,然后在删除复制后删除这个临时列。
df['concatenated_all'] = df['col1'].astype(str)+'_'+df['col2'].astype(str)+'_'+df['col3'].astype(str)+'_'+df['col4'].astype(str)+'_'+df['coln'].astype(str)
df = df.drop_duplicates(subset='concatenated_all', keep="last")
df = df.drop(['concatenated_all'], axis=1)https://stackoverflow.com/questions/45848443
复制相似问题