简体   繁体   English

将类型为“object”的数据框列转换为 set()

[英]Convert dataframe column with type "object" to a set()

Got a dataframe df with a column "Id"得到一个带有“Id”列的数据框 df

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

I need to convert column "Id" into a set() but我需要将列“Id”转换为 set() 但是

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

returns返回

{'Id'}

instead of a set() of the strings from column "Id"?而不是来自“Id”列的字符串的 set() ?

For me working correctly if exist only one id column:如果只存在一个id列,我就可以正常工作:

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

But if there is more columns names id then df['id'] return DataFrame , so set(df["Id"]) return unique columns names:但是如果有更多的列名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'}

Because:因为:

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

working same like工作一样

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

and similar for sets:和类似的集合:

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

Possible solution for deduplicate columns:重复数据删除列的可能解决方案:

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

Or if always same values remove duplicated columns:或者如果总是相同的值删除重复的列:

df = df.loc[:, ~df.columns.duplicated()]
print (df)
            Id
0  -KkJz3CoJNM
1  08QMXEQbEWw
2  0ANuuVrIWJw
3  0pPU8CtwXTo
4  1-wYH2LEcmk

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM