gpt4 book ai didi

python - 如何临时将 pandas df 转换为小写以进行重复检查?然后恢复正常

转载 作者:太空宇宙 更新时间:2023-11-04 04:08:15 25 4
gpt4 key购买 nike

我正在根据名字、姓氏、电子邮件从数据框中删除重复项,并保存到一个名为 df_unique 的新 df。

我已将所有内容转换为小写并删除空格,以便字段增加匹配的机会。请注意,索引 0 和 2 是相同的,但在不转换为较低的情况下不会被拾取。

df = pd.DataFrame({'firstname':['foo Bar','Bar Bar','Foo Bar'],'lastname':['Foo Bar','Bar','Foo Bar'],'email':['Foo bar','Bar','Foo Bar']})

df

firstname lastname email
0 foo Bar Foo Bar Foo bar
1 Bar Bar Bar Bar
2 Foo Bar Foo Bar Foo Bar

#remove NAs
#convert to lower
#remove whitespace
#drop dupes


df_unique = (df.dropna(subset=['firstname', 'lastname', 'email'])
.applymap(lambda s:s.lower() if type(s) == str else s)
.applymap(lambda x: x.replace(" ", "") if type(x)==str else x)
.drop_duplicates(subset=['firstname', 'lastname', 'email']))


df_unique

firstname lastname email
0 foobar foobar foobar
1 barbar bar bar


但是,记录现在永久为小写,像 Foo Bar 这样的双名称现在是 foobar

如何在不永久更改数据的情况下执行此操作?

我试过在所有这些中间使用 .copy() 但它变得太乱了而且破坏了东西。

有更好的方法吗?

编辑:

通过对下面@shaik moeeds 的回答进行一些调整,我设法得到了一些工作。

这里我得到了唯一记录的索引:

uniq_indx = (df.dropna(subset=['firstname', 'lastname', 'email'])
.applymap(lambda s:s.lower() if type(s) == str else s)
.applymap(lambda x: x.replace(" ", "") if type(x)==str else x)
.drop_duplicates(subset=['firstname', 'lastname', 'email'])).index

然后使用它来索引 DF 并保存唯一记录:

df_unique = df.loc[uniq_indx]

我还想保留重复记录,所以使用 drop() 和上面的索引来删除唯一记录:

df_duplicates = df.drop(uniq_indx)

这似乎适用于检查输出,但是如果有任何错误请告诉我。

最佳答案

您可以继续您的代码,稍作修改。使用重复的 .index 值,以获得原始格式。

像这样,

>>> df = pd.DataFrame({'firstname':['Foo Bar','Foo Bar','Bar Bar','Foo Bar'],
'lastname' :['Foo Bar','Foo Bar', 'Bar','Foo Bar'],
'email' :['Foo Bar','Foo Bar', 'Bar','Foo Bar']})

>>> df.iloc[(df.dropna(subset=['firstname', 'lastname', 'email'])
.applymap(lambda s:s.lower() if type(s) == str else s)
.applymap(lambda x: x.replace(" ", "") if type(x)==str else x)
.drop_duplicates(subset=['firstname', 'lastname', 'email'])).index]

输出:

  firstname lastname    email
0 Foo Bar Foo Bar Foo Bar
2 Bar Bar Bar Bar

关于python - 如何临时将 pandas df 转换为小写以进行重复检查?然后恢复正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56849223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com