我有一个来自报废的df,并返回了许多不必要的数据,但是当我使用drop.duplicate时,一些列显示的是修改后的值。
我最初的df:
|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')时,我会收到回复
|Date | Sex | Name |
|01-02-2022| F | A |
|01-02-2022| F | B |为什么?
还有其他更好的方法来保持A和B的第一价值在一个巨大的df?
`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'])发布于 2022-05-04 19:13:12
在看不到实际数据的情况下,我们只能猜测到底发生了什么。我猜你的数据看起来并不像你说的那样。下面是带有虚假数据的代码,这些代码显示drop_duplicates实际上确实按广告所示工作:
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)输出:
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发布于 2022-05-04 19:19:57
下面是drop_duplicates()中的参数是如何工作的
参数:
子集:默认情况下,如果行在所有列中具有相同的值,则它们被认为是重复的。此参数指定标识重复项时只需考虑的列。
保存:确定要保留哪些副本(如果有的话)。它接受输入作为,第一次重复,除了第一次出现.这是默认行为。除最后一次事件外,最后一次重复。假的-删除所有的副本。
inplace:它用于指定是返回新DataFrame还是更新现有DataFrame。它是一个布尔标志,默认为False。
ignore_index:它是一个布尔标志,指示删除重复行后是否应该重置行索引。False:它保留原始行索引。True:它重置索引,生成的行将被标记为0、1、…,n- 1。
我试着运行您的代码,得到了以下输出。
Date Sex Name
0 01-02-2022 F A
2 10-02-2022 M B您之所以获得结果,可能是因为在删除复制之前,您可能已经对列“日期”和“性别”进行了排序,并且可能有一个值“01-02-2022”和“F”表示名称'B',在这种情况下,删除重复项之前不要对值进行排序。
如果你想改变索引,
df = df.drop_duplicates('Name', keep = 'first', ignore_index=True)下面是我试过的代码,
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)希望这能有所帮助!
发布于 2022-05-04 19:06:57
尝试分配要删除重复值的列:
df_foo = df_foo.drop_duplicates(['your_column'])https://stackoverflow.com/questions/72118141
复制相似问题