我使用 open(( 和 read(( 在 jupyter notebook 中打开了一个文件。我使用 for 循环来查找重复项。它工作得很好。
我使用熊猫数据框打开了相同的文件。我之前使用的 for 循环不起作用。它没有产生任何结果。
熊猫中的 for 循环不会打印任何内容。
duplicate_apps = []
unique_apps = []
for app in android:
name = app[0]
if name in unique_apps:
duplicate_apps.append(name)
else:
unique_apps.append(name)
print('Number of duplicate apps:', len(duplicate_apps))
print('n')
print('Examples of duplicate apps:', duplicate_apps[:15])
当我使用 open((和 reader(( 时,这个循环运行良好,但当我使用 pandas 数据帧打开文件时,这个循环不起作用。
如果像这样循环访问数据帧:
for app in android:
name = app[0]
if name in unique_apps:
duplicate_apps.append(name)
else:
unique_apps.append(name)
变量app
将循环访问列名。但是,如果要遍历名为name
的列,则必须这样做:
for idx, row in android.iterrows():
name = row['name']
if name in unique_apps:
duplicate_apps.append(name)
else:
unique_apps.append(name)
但这不是在您的示例中执行此操作的最佳方法,您可以改为执行以下操作:
# create counts
counts= android.groupby(['name']).apply(len).reset_index()
counts.columns= ['name', 'count']
# get the duplicate names
counts.loc[counts['count']>1, 'name']
# get the unique names
counts.loc[counts['count']==1, 'name']
请注意,这并不完全等同于您的结果,因为在您的结果中,重复名称是唯一名称的子集。如果你真的想要它,你只需要将最后一行替换为
counts.loc[:, 'name']
例子:
android= pd.DataFrame(dict(name=['skype', 'notepad', 'messenger', 'notepad', 'play']))
# duplicates:
Out[522]:
1 notepad
Name: name, dtype: object
# real unique values:
Out[523]:
0 messenger
2 play
3 skype
Name: name, dtype: object
如果你想使用python列表,只需添加.to_list()
,如:
counts.loc[counts['count']==1, 'name'].to_list()