Snažím sa vytvoriť funkciu na odstránenie stĺpcov s jednou hodnotou z mojej sady údajov Použil som túto funkciu:
def oneCatElimination(dataframe):
columns=dataframe.columns.values
for column in columns:
if len(dataframe[column].value_counts().unique())==1:
del dataframe[column]
return dataframe
problémom je, že táto funkcia eliminuje dokonca stĺpec s viacerými odlišnými hodnotami, t.j. indexovým stĺpcom s celočíselným číslom.
odpovede:
3 pre odpoveď č. 1Len
df.dropna(thresh=2, axis=1)
bude pracovať. Nie je potrebné nič iné. Uchováva všetky stĺpce s 2 alebo viacerými hodnotami, ktoré nie sú NA (kontrolované hodnotou prechádzajúcou na hodnotu thresh
). axis
kwarg vám umožní pracovať s riadkami alebo stĺpcami. Je to predvolené riadky, takže musíte prejsť axis=1
výslovne pracovať na stĺpcoch (zabudol som to v čase, keď som odpovedal, a preto je to editácia). vidieť dropna()
Pre viac informácií.
1 pre odpoveď č. 2
Došlo k niekoľkým predpokladom:
- Hodnoty Null / NA sa nepočítajú
- Na udržanie stĺpca potrebujete viacero hodnôt, ktoré nie sú NA
- Tieto hodnoty musia byť nejakým spôsobom odlišné (napr. Stĺpec plný 1 "s a iba 1" s by mal byť zrušený)
Všetko, čo povedal, by som použil a select
vyhlásenie o stĺpcoch.
Ak začnete s týmto dátovým rámcom:
import pandas
N = 15
df = pandas.DataFrame(index=range(10), columns=list("ABCD"))
df.loc[2, "A"] = 23
df.loc[3, "B"] = 52
df.loc[4, "B"] = 36
df.loc[5, "C"] = 11
df.loc[6, "C"] = 11
df.loc[7, "D"] = 43
df.loc[8, "D"] = 63
df.loc[9, "D"] = 97
df
Čo vytvára:
A B C D
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 23 NaN NaN NaN
3 NaN 52 NaN NaN
4 NaN 36 NaN NaN
5 NaN NaN 11 NaN
6 NaN NaN 11 NaN
7 NaN NaN NaN 43
8 NaN NaN NaN 63
9 NaN NaN NaN 97
Vzhľadom na vyššie uvedené predpoklady by mali byť stĺpce A a C zrušené, pretože A má iba jednu hodnotu a obe hodnoty C sú rovnaké. Potom môžete urobiť:
df.select(lambda c: df[c].dropna().unique().shape[0] > 1, axis=1)
A to mi dáva:
B D
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 52 NaN
4 36 NaN
5 NaN NaN
6 NaN NaN
7 NaN 43
8 NaN 63
9 NaN 97
0 pre odpoveď č. 3
To bude fungovať tak pre text, ako aj pre čísla:
for col in dataframe:
if(len(dataframe.loc[:,col].unique()) == 1):
dataframe.pop(col)
Poznámka: Týmto odstránite stĺpce, ktoré majú iba jednu hodnotu z pôvodného dátového rámca.