2015-04-03 55 views
1

我想從Python中的熊貓數據框中刪除重複的條目。 DataFrame由多個* .csv文件的垂直concatenated內容組成。下面是數據框:熊貓識別列1中的所有行,其中列2,3中出現重複

print df 

    file TestA TestB 
    One.csv  7513 -643.1 
    One.csv 15347  NaN 
    One.csv  NaN  22.7 
    One.csv 46321  NaN 
    One.csv  NaN 156.1 
    One.csv  2477  52.7 
    Two.csv  417 1473.5 
    Two.csv  7513 -643.1 
    Two.csv 15347  NaN 
    Two.csv  NaN  22.7 
    Two.csv 46321  NaN 
    Two.csv  NaN 156.1 
Three.csv -4341  NaN 
Three.csv 34473  437 
Three.csv  1349  NaN 
Four.csv  17  NaN 
Four.csv  107  NaN 
Four.csv  -931 44536 
Four.csv  6285  NaN 
Four.csv  119 34722 

我想做到以下幾點:一 。

print("Rows %s of %s are duplicated in rows %s of %s. Rows from %s will now be removed from the DataFrame.") % ([1,2,3,4,5],'One.csv',[2,3,4,5,6],'Two.csv', 'One.csv') 

我想print聲明這樣的結果:喜歡的東西

Rows [1,2,3,4,5] of One.csv are duplicated in rows [2,3,4,5,6] of Two.csv. Rows from One.csv will now be removed from the DataFrame.

我不知道如何識別行和設置他們在print聲明。

有沒有方法根據第1列的行號識別重複的行(FileName)?

編輯: 要創建DataFrame df,請從這裏選擇並複製DataFrame到剪貼板。然後用這個:

import pandas as pd 
df = pd.read_clipboard() 
print df 

回答

0

不知道究竟你想打印,但您可以用groupby識別重複的行:

In [169]: g = df.groupby(['TestA', 'TestB']) 
In [170]: g.groups 
Out[170]: 
{(-4341.0, nan): [12L], 
(-931.0, 44536.0): [17L], 
(17.0, nan): [15L], 
(107.0, nan): [16L], 
(119.0, 34722.0): [19L], 
(417.0, 1473.5): [6L], 
(1349.0, nan): [14L], 
(2477.0, 52.7): [5L], 
(6285.0, nan): [18L], 
(7513.0, -643.1): [0L, 7L], 
(15347.0, nan): [8L], 
(34473.0, 437.0): [13L], 
(46321.0, nan): [3L], 
(nan, 22.7): [9L], 
(nan, 156.1): [4L], 
(nan, 156.1): [11L], 
(15347.0, nan): [1L], 
(nan, 22.7): [2L], 
(46321.0, nan): [10L]} 

然後你可以選擇你想刪除

哪些
+0

嗨,我已經添加到原來的職位,我想'印刷'輸出。我想從'FileName'列的2' * .csv'文件名中找到重複行號的列表。在'One.csv'中,我想要一個表示'[1,2,3,4,5]'的列表,並且在'Two.csv'中我想要一個表示[2,3,4,5,6 ]。 – 2015-04-03 15:58:12

0

我得寄我都試過,希望它得到的東西會在這裏:

1.本給我重複:

duplicates = df[df.columns[1:]].duplicated() 

2.本給我的文件有重複的條目列表:

files = df[duplicates==True]['file'].unique().tolist() 

3,本打印的消息是接近我想要的,但不是我想要的東西:

print('Rows of ' + ", ".join(["%s"]*len(files)) + 'are duplicated. These rows will now be removed from the dataframe.' % tuple(files)) 

print語句丟失:

  1. 每個行號˚F ILE - 它缺少[1,2,3,4,5]爲One.csv
  2. 行號[2,3,4,5,6]爲Two.csv

如果有人能找到要包含在打印語句這些行號(如我已經描述的方式原來的帖子),那麼這將回答這個問題。

+0

我在下面的帖子中進一步添加了一條評論,解釋所需的列表。我還將此添加到原始帖子中。如果有任何額外的信息需要,請隨時讓我知道。我想獲得一些幫助打印行號(如上所述)。 – 2015-04-04 20:00:29