Python 将类型为“object”的dataframe列转换为集合()

Python 将类型为“object”的dataframe列转换为集合(),python,pandas,set,Python,Pandas,Set,获取了一个列Id为的数据帧df Id 0 -KkJz3CoJNM 1 08QMXEQbEWw 2 0ANuuVrIWJw 3 0pPU8CtwXTo 4 1-wYH2LEcmk 我需要将列Id转换为集合,但 set_id = set(df["Id"]) print(set_id) 返回 {'Id'} 而不是列Id中的一组字符串?对于我来说,如果只存在一个Id列,则可以正常工作: 但是如果有更多的列名称id,那么df['id']返回数据帧,因此setd

获取了一个列Id为的数据帧df

     Id
0    -KkJz3CoJNM
1    08QMXEQbEWw
2    0ANuuVrIWJw
3    0pPU8CtwXTo
4    1-wYH2LEcmk
我需要将列Id转换为集合,但

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

{'Id'}

而不是列Id中的一组字符串?

对于我来说,如果只存在一个Id列,则可以正常工作:

但是如果有更多的列名称id,那么df['id']返回数据帧,因此setdf[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

对于我来说,如果只存在一个id列,则工作正常:

但是如果有更多的列名称id,那么df['id']返回数据帧,因此setdf[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

由于一些奇怪的原因,我确实有两次身份证。但是df=df.drop\u重复项不知何故不起作用?仍然有两个Id?@Vega-那么df=df.loc[:,~df.columns.duplicated]是必需的。您的解决方案似乎可以工作,但如何才能。删除重复项不工作?这不正是它的用途吗?@Vega-好的,如果像df=df.t.drop_duplicates.t这样的转置,它会起作用。因为默认情况下,熊猫是按行而不是按列删除重复项的。@Vega-因为像df=df.drop_duplicates=1I这样的不存在,我确实有两个Id,原因很奇怪。但是df=df.drop\u重复项不知何故不起作用?仍然有两个Id?@Vega-那么df=df.loc[:,~df.columns.duplicated]是必需的。您的解决方案似乎可以工作,但如何才能。删除重复项不工作?这不正是这个用例吗?@Vega-好的,如果像df=df.t.drop\u duplicates.t这样的转置,它会工作。因为默认情况下,熊猫会按行而不是按列删除重复项。@Vega-因为像df=df.drop\u duplicates=1一样不存在