ahn*_*nni 7 python unique dataframe pandas drop-duplicates
我有一个 DataFrame,其中的列具有不同名称的重复数据:
In[1]: df
Out[1]:
X1 X2 Y1 Y2
0.0 0.0 6.0 6.0
3.0 3.0 7.1 7.1
7.6 7.6 1.2 1.2
Run Code Online (Sandbox Code Playgroud)
我知道 .drop(columns = ) 存在,但是有没有一种更有效的方法可以删除它们,而不必列出列名称?或不..请告诉我,因为我可以使用 .drop()
我们可以np.unique在轴 1 上使用。不幸的是,pandas 没有内置函数来删除重复的列。
df.drop_duplicates只删除重复的行。
返回删除了重复行的 DataFrame。
我们可以创建一个函数np.unique来删除重复的列。
def drop_duplicate_cols(df):
uniq, idxs = np.unique(df, return_index=True, axis=1)
return pd.DataFrame(uniq, index=df.index, columns=df.columns[idxs])
drop_duplicate_cols(X)
X1 Y1
0 0.0 6.0
1 3.0 7.1
2 7.6 1.2
Run Code Online (Sandbox Code Playgroud)
注意:
np.unique文档:返回数组中已排序的唯一元素。
解决方法:要保留原始顺序,请对
idxs.
.T在具有多个的数据帧上使用dtypes会扰乱您的实际dtypes.
df = pd.DataFrame({'A': [0, 1], 'B': ['a', 'b'], 'C': [0, 1], 'D':[2.1, 3.1]})
df.dtypes
A int64
B object
C int64
D float64
dtype: object
df.T.T.dtypes
A object
B object
C object
D object
dtype: object
# To get back original `dtypes` we can use `.astype`
df.T.T.astype(df.dtypes).dtypes
A int64
B object
C int64
D float64
dtype: object
Run Code Online (Sandbox Code Playgroud)
您可以转置T,drop_duplicates然后转回:
>>> df.T.drop_duplicates().T
X1 Y1
0 0.0 6.0
1 3.0 7.1
2 7.6 1.2
>>>
Run Code Online (Sandbox Code Playgroud)
或者与loc和duplicated:
>>> df.loc[:, df.T.duplicated(keep='last')]
X1 Y1
0 0.0 6.0
1 3.0 7.1
2 7.6 1.2
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2317 次 |
| 最近记录: |