DataFrame.drop_duplicates和DataFrame.drop不删除行

时间:2014-09-06 01:08:56

标签: python pandas

我已经在csv中读到了一个pandas数据帧,它有五列。某些行仅在第二列中具有重复值,我想从数据帧中删除这些行,但drop和drop_duplicates都不起作用。

这是我的实施:

#Read CSV
df = pd.read_csv(data_path, header=0, names=['a', 'b', 'c', 'd', 'e'])

print Series(df.b)

dropRows = []
#Sanitize the data to get rid of duplicates
for indx, val in enumerate(df.b): #for all the values
    if(indx == 0): #skip first indx
        continue

    if (val == df.b[indx-1]): #this is duplicate rtc value
        dropRows.append(indx)

print dropRows

df.drop(dropRows) #this doesnt work
df.drop_duplicates('b') #this doesnt work either

print Series(df.b)

当我打印出df.b系列之前和之后的长度相同时,我仍然可以看到重复的副本。我的实施有什么问题吗?

2 个答案:

答案 0 :(得分:15)

正如评论中所提到的,dropdrop_duplicates会创建一个新的DataFrame,除非提供了inplace参数。所有这些选项都有效:

df = df.drop(dropRows)
df = df.drop_duplicates('b') #this doesnt work either
df.drop(dropRows, inplace = True)
df.drop_duplicates('b', inplace = True)

答案 1 :(得分:1)

在我的情况下,问题是我正在将dfs与不同类型的列连接起来:

import pandas as pd

s1 = pd.DataFrame([['a', 1]], columns=['letter', 'code'])
s2 = pd.DataFrame([['a', '1']], columns=['letter', 'code'])
df = pd.concat([s1, s2])
df = df.reset_index(drop=True)
df.drop_duplicates(inplace=True)

# 2 rows
print(df)

# int
print(type(df.at[0, 'code']))
# string
print(type(df.at[1, 'code']))

# Fix:
df['code'] = df['code'].astype(str)
df.drop_duplicates(inplace=True)

# 1 row
print(df)