返回.csv中的唯一值和python + pandas中的唯一字符串

时间:2015-01-16 18:31:32

标签: python csv pandas

我的问题与此处非常相似: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))

但是,我的设置会打印出一个字符列表,而不是我在上面打印时出现在屏幕上的字符串/浮点数/值。

有人请帮助指出我在这项任务中惨遭失败的地方。谢谢!

1 个答案:

答案 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失败了,因为我给你的代码是用空字符串替换缺失值。试试那些:

  1. df = df.fillna(np.nan)
  2. df = df.fillna(0)
  3. 首先,您需要先导入numpy(import numpy as np)。它必须已经安装,因为你有熊猫。