J'ai un bloc de données qui ressemble à ceci.
s = '83jjdmi239450 19dkd'
s = re.sub("\D", "", s)
J'essaie de me débarrasser de la chaîne " inf ". Fondamentalement, je veux simplement supprimer toutes les chaînes et ne conserver que les nombres dans le dataframe.
J'ai essayé le code suivant ci-dessous.
TypeError: expected string or bytes-like object
Lorsque j'exécute l'une de ces lignes de code, j'obtiens l'erreur suivante.
kepler = re.sub("\D", "", kepler)
kepler = re.sub('[^0-9]','0', kepler)
Si j'ai une chaîne très simple, cela fonctionne réellement. Donc, cela fonctionnera.
0 1.144921 1 1.000000 2 1.119507 3 inf 4 0.000000 5 inf 6 0.000000 7 0.000000 8 1.000000 9 0.000000 10 0.000000 11 0.000000 12 1.793687 13 inf
Malheureusement, le code ne fonctionne pas sur mon dataframe. Des pensées? Merci.
3 Réponses :
Avec numpy.isfinite routine sur exemple de dataframe:
In [176]: df
Out[176]:
a
0 1.000000
1 1.119507
2 inf
3 0.000000
4 inf
5 0.000000
6 0.000000
7 1.000000
8 0.000000
9 0.000000
10 0.000000
11 1.793687
12 inf
In [177]: df = df[~np.isinf(df['a'])]
In [178]: df
Out[178]:
a
0 1.000000
1 1.119507
3 0.000000
5 0.000000
6 0.000000
7 1.000000
8 0.000000
9 0.000000
10 0.000000
11 1.793687
Essayez
df = pd.read_clipboard()
df.columns = ['col1','col2']
df
col1 col2
0 1 1.000000
1 2 1.119507
2 3 inf
3 4 0.000000
4 5 inf
5 6 0.000000
6 7 0.000000
7 8 1.000000
8 9 0.000000
9 10 0.000000
10 11 0.000000
11 12 1.793687
12 13 inf
df.col2[df.col2 < np.inf]
0 1.000000
1 1.119507
3 0.000000
5 0.000000
6 0.000000
7 1.000000
8 0.000000
9 0.000000
10 0.000000
11 1.793687
J'essaye de me débarrasser de la chaîne "inf".
Vous le décrivez comme une chaîne, mais ce n'est que la représentation imprimée d'un nombre à virgule flottante 64 bits.
TypeError: chaîne attendue ou objet de type octets
Vous ne pouvez pas transférer un flottant dans une opération regex, car une regex a besoin d'une chaîne.
Au lieu de cela, transformez les quantités infinies en
NaNs, et déposez-les:rows = [dict(x=1.79), dict(x=math.inf)] df = pd.DataFrame(rows).replace([np.inf, -np.inf], np.nan) df = df.dropna()
D'accord. Ça marche. Merci tout le monde.
Utilisez-vous des pandas ici?
Essayez
kepler = re.sub ("\ D", "", kepler) si type (kepler) == 'str' else keplerOui, je lis des données à partir d'un fichier CSV. kepler = pd.read_csv (fichier)
cherchez-vous df [df [0] .apply (lambda x: type (x)! = str)]
Est-ce que cela répond à votre question? supprimer des valeurs infinies de dataframes chez les pandas?