Преобразовать столбец dataframe с типом "object" в set () - PullRequest
1 голос
/ 25 марта 2020

Получил фрейм данных df со столбцом "Id"

     Id
0    -KkJz3CoJNM
1    08QMXEQbEWw
2    0ANuuVrIWJw
3    0pPU8CtwXTo
4    1-wYH2LEcmk

Мне нужно преобразовать столбец "Id" в set (), но

set_id = set(df["Id"])
print(set_id)

возвращает

{'Id'}

вместо набора () строк из столбца "Id"?

1 Ответ

3 голосов
/ 25 марта 2020

Для меня правильно работает, если существует только один id столбец:

set_id = set(df["Id"])
print(set_id)
{'1-wYH2LEcmk', '08QMXEQbEWw', '0pPU8CtwXTo', '0ANuuVrIWJw', '-KkJz3CoJNM'}

Но если есть еще имена столбцов id, тогда df['id'] возвращает DataFrame, поэтому set(df["Id"]) возвращает уникальный имена столбцов:

#test for 2 columns with sample data
df = pd.concat([df, df], axis=1)
print (df["Id"])
            Id           Id
0  -KkJz3CoJNM  -KkJz3CoJNM
1  08QMXEQbEWw  08QMXEQbEWw
2  0ANuuVrIWJw  0ANuuVrIWJw
3  0pPU8CtwXTo  0pPU8CtwXTo
4  1-wYH2LEcmk  1-wYH2LEcmk

set_id = set(df["Id"])
print(set_id)
{'Id'}

Поскольку:

L = list(df["Id"])
print(L)
['Id', 'Id']

работает так же, как

L = list(df["Id"].columns)
print(L)
['Id', 'Id']

и аналогично для наборов:

set_id = set(df["Id"].columns)
print(set_id)
{'Id'}

Возможно решение для дедупликации столбцов:

c = df.columns.to_series()

df.columns += c.groupby(c).cumcount().astype(str).radd('.').replace('.0','')
print (df)
            Id         Id.1
0  -KkJz3CoJNM  -KkJz3CoJNM
1  08QMXEQbEWw  08QMXEQbEWw
2  0ANuuVrIWJw  0ANuuVrIWJw
3  0pPU8CtwXTo  0pPU8CtwXTo
4  1-wYH2LEcmk  1-wYH2LEcmk

Или, если всегда одинаковые значения, удалите дубликаты столбцов:

df = df.loc[:, ~df.columns.duplicated()]
print (df)
            Id
0  -KkJz3CoJNM
1  08QMXEQbEWw
2  0ANuuVrIWJw
3  0pPU8CtwXTo
4  1-wYH2LEcmk
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...