use*_*ser 3 python python-3.x pandas
说我的数据框是:
df = pandas.DataFrame([[[1,0]],[[0,0]],[[1,0]]])
Run Code Online (Sandbox Code Playgroud)
产生:
0
0 [1, 0]
1 [0, 0]
2 [1, 0]
Run Code Online (Sandbox Code Playgroud)
我想删除重复项,并且只写以下内容:[1,0]和[0,0]:
df.drop_duplicates()
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:TypeError:不可哈希类型:'列表'
如何调用drop_duplicates()?
一般而言:
df = pandas.DataFrame([[[1,0],"a"],[[0,0],"b"],[[1,0],"c"]], columns=["list", "letter"])
Run Code Online (Sandbox Code Playgroud)
我想调用df [“ list”]。drop_duplicates(),所以drop_duplicates适用于Series而不是数据框?
我尝试了其他答案,但它们没有解决我需要的问题(具有多个列表列的大型数据框)。
我是这样解决的:
df = df[~df.astype(str).duplicated()]
Run Code Online (Sandbox Code Playgroud)
drop_duplicates调用drop_duplicates元组化数据:
df[0].apply(tuple, 1).drop_duplicates().apply(list).to_frame()
0
0 [1, 0]
1 [0, 0]
Run Code Online (Sandbox Code Playgroud)
collections.OrderedDict但是,我更喜欢不涉及的东西apply......
from collections import OrderedDict
pd.Series(map(
list, (OrderedDict.fromkeys(map(tuple, df[0].tolist()))))
).to_frame()
Run Code Online (Sandbox Code Playgroud)
或者,
pd.Series(
list(k) for k in OrderedDict.fromkeys(map(tuple, df[0].tolist()))
).to_frame()
Run Code Online (Sandbox Code Playgroud)
0
0 [1, 0]
1 [0, 0]
Run Code Online (Sandbox Code Playgroud)
您可以使用numpy.unique()功能:
>>> df = pandas.DataFrame([[[1,0]],[[0,0]],[[1,0]]])
>>> pandas.DataFrame(np.unique(df), columns=df.columns)
0
0 [0, 0]
1 [1, 0]
Run Code Online (Sandbox Code Playgroud)
如果要保留订单结帐:numpy.unique,保留订单
| 归档时间: |
|
| 查看次数: |
2473 次 |
| 最近记录: |