我的问题与此处非常相似:Find unique values in a Pandas dataframe, irrespective of row or column location
我对编码非常陌生,所以我提前为这个问题道歉。
我有一个.csv文件,我打开它作为pandas数据框,并希望能够在整个数据框中返回唯一值,以及所有唯一字符串。
我试过了:
for row in df:
pd.unique(df.values.ravel())
这无法遍历行。
以下代码打印出我想要的内容:
for index, row in df.iterrows():
if isinstance(row, object):
print('%s\n%s' % (index, row))
但是,当我点击空白列(NoneType错误)时,尝试将这些值放入先前定义的集合(myset = set())失败:
for index, row in df.iterrows():
if isinstance(row, object):
myset.update(print('%s\n%s' % (index, row)))
当我尝试以下内容时,我最接近我的目标:
for index, row in df.iterrows():
if isinstance(row, object):
myset.update('%s\n%s' % (index, row))
但是,我的设置会打印出一个字符列表,而不是我在上面打印时出现在屏幕上的字符串/浮点数/值。
有人请帮助指出我在这项任务中惨遭失败的地方。谢谢!
答案 0 :(得分:0)
我认为以下几乎适用于任何数据帧。它将提取整个数据帧中唯一的每个值。
如果遇到问题发表评论,我会尝试解决。
# Replace all nones / nas by spaces - so they won't bother us later
df = df.fillna('')
# Preparing a list
list_sets = []
# Iterates all columns (much faster than rows)
for col in df.columns:
# List containing all the unique values of this column
this_set = list(set(df[col].values))
# Creating a combined list
list_sets = list_sets + this_set
# Doing a set of the combined list
final_set = list(set(list_sets))
# For completion's sake, you can remove the space introduced by the fillna step
final_set.remove('')
我想我知道会发生什么。你必须有一些浮动列,并且fillna失败了,因为我给你的代码是用空字符串替换缺失值。试试那些:
首先,您需要先导入numpy(import numpy as np
)。它必须已经安装,因为你有熊猫。