首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >drop.duplicates()改变数据?

drop.duplicates()改变数据?
EN

Stack Overflow用户
提问于 2022-05-04 18:56:33
回答 3查看 89关注 0票数 0

我有一个来自报废的df,并返回了许多不必要的数据,但是当我使用drop.duplicate时,一些列显示的是修改后的值。

我最初的df:

代码语言:javascript
复制
    |Date      | Sex | Name |
    |01-02-2022| F   | A    |
    |09-02-2022| F   | A    |
    |10-02-2022| M   | B    |
    |27-02-2022| M   | B    |

当我使用df.drop_duplicates('Name', keep = 'first')时,我会收到回复

代码语言:javascript
复制
        |Date      | Sex | Name |
        |01-02-2022| F   | A    |
        |01-02-2022| F   | B    |

为什么?

还有其他更好的方法来保持A和B的第一价值在一个巨大的df?

代码语言:javascript
复制
 `PATH =`  (r"C:\Users\Gustavo.vieira\Desktop\python\drivers\msedgedriver.exe")
    cols = ['data_evento', 'data_liquidacao','evento', 'tx%', 'valor_pago','status','Ativo']
    url_cr = 'https://data.anbima.com.br/certificado-de-recebiveis/{}/agenda'
    lista_teste = ['CRA0160000P','CRA0160000X','CRA017001P6']
    data = []
    blank_row = []
    final_df = pd.DataFrame()


#Will be necessary use selenium, cause the url_cr and url_deb use a different 'g-google-authorization for each asset
for cr in lista_teste:
    driver = webdriver.Edge(PATH)
    driver.get(url_cr.format(cr))
    time.sleep(3)
    soup = BeautifulSoup(driver.page_source)
#With the web opened, the next rows will find the first table, and all rows for that specific table    
    try:
        html_data = soup.find_all('table')[0].find_all('tr')[1:]
        for element in html_data:
#Creating a local variable to extract             
            sub_data = []
            for sub_element in element:
                try:
                    sub_data.append(sub_element.get_text())
                except:
                    continue
                data.append(sub_data)
            cr_df = pd.DataFrame(data)
            cr_df[6] = cr
        final_df = final_df.append(cr_df)
    except:
        print('dados indisponiveis do ativos: {}.'.format(cr))



final_df.columns = cols
today = datetime.date.today()
final_df['data_liquidacao'] = pd.to_datetime(final_df['data_liquidacao'], infer_datetime_format= True)
final_df = final_df[final_df['data_liquidacao'].dt.date > today]
teste = final_df.drop_duplicates(['Ativo'])
EN

回答 3

Stack Overflow用户

发布于 2022-05-04 19:13:12

在看不到实际数据的情况下,我们只能猜测到底发生了什么。我猜你的数据看起来并不像你说的那样。下面是带有虚假数据的代码,这些代码显示drop_duplicates实际上确实按广告所示工作:

代码语言:javascript
复制
import pandas as pd

data = [
        ['02-01-2022','F','A'],
        ['02-09-2022','F','A'],
        ['02-10-2022','M','B'],
        ['02-27-2022','M','B']
]

df = pd.DataFrame( data, columns=['Date','Sex','Name'])
print(df)
df = df.drop_duplicates('Name',keep='first')
print(df)

输出:

代码语言:javascript
复制
         Date Sex Name
0  02-01-2022   F    A
1  02-09-2022   F    A
2  02-10-2022   M    B
3  02-27-2022   M    B
         Date Sex Name
0  02-01-2022   F    A
2  02-10-2022   M    B
票数 1
EN

Stack Overflow用户

发布于 2022-05-04 19:19:57

下面是drop_duplicates()中的参数是如何工作的

参数:

子集:默认情况下,如果行在所有列中具有相同的值,则它们被认为是重复的。此参数指定标识重复项时只需考虑的列。

保存:确定要保留哪些副本(如果有的话)。它接受输入作为,第一次重复,除了第一次出现.这是默认行为。除最后一次事件外,最后一次重复。假的-删除所有的副本。

inplace:它用于指定是返回新DataFrame还是更新现有DataFrame。它是一个布尔标志,默认为False。

ignore_index:它是一个布尔标志,指示删除重复行后是否应该重置行索引。False:它保留原始行索引。True:它重置索引,生成的行将被标记为0、1、…,n- 1。

我试着运行您的代码,得到了以下输出。

代码语言:javascript
复制
Date    Sex Name
0   01-02-2022  F   A
2   10-02-2022  M   B

您之所以获得结果,可能是因为在删除复制之前,您可能已经对列“日期”和“性别”进行了排序,并且可能有一个值“01-02-2022”和“F”表示名称'B',在这种情况下,删除重复项之前不要对值进行排序。

如果你想改变索引,

代码语言:javascript
复制
df = df.drop_duplicates('Name', keep = 'first', ignore_index=True)

下面是我试过的代码,

代码语言:javascript
复制
import pandas as pd

dict_ = {"Date": ["01-02-2022", "09-02-2022", "10-02-2022", "27-02-2022"], "Sex": ['F', 'F', 'M', 'M'],
                "Name": ['A', 'A', 'B', 'B']}

df = pd.DataFrame(dict_)
print(df)

# drop duplicate rows
df = df.drop_duplicates('Name', keep = 'first', ignore_index=True)

希望这能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2022-05-04 19:06:57

尝试分配要删除重复值的列:

代码语言:javascript
复制
df_foo = df_foo.drop_duplicates(['your_column'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72118141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档