Ich habe folgende Eingabedatei:
"Name",97.7,0A,0A,65M,0A,100M,5M,75M,100M,90M,90M,99M,90M,0#,0N#,
Und ich lese es mit:
#!/usr/bin/env python
import pandas as pd
import sys
import numpy as np
filename = sys.argv[1]
df = pd.read_csv(filename,header=None)
for col in df.columns[2:]:
df[col] = df[col].str.extract(r'(\d+\.*\d*)').astype(np.float)
print df
Ich bekomme jedoch den Fehler
df[col] = df[col].str.extract(r'(\d+\.*\d*)').astype(np.float)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/generic.py", line 2241, in __getattr__
return object.__getattribute__(self, name)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/base.py", line 188, in __get__
return self.construct_accessor(instance)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/base.py", line 528, in _make_str_accessor
raise AttributeError("Can only use .str accessor with string "
AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
Dies funktionierte in Pandas 0.14 in Ordnung, aber in Pandas 0.17.0 nicht.
Dies geschieht, weil Ihre letzte Spalte leer ist und diese in NaN
konvertiert wird:
In [417]:
t="""'Name',97.7,0A,0A,65M,0A,100M,5M,75M,100M,90M,90M,99M,90M,0#,0N#,"""
df = pd.read_csv(io.StringIO(t), header=None)
df
Out[417]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 \
0 'Name' 97.7 0A 0A 65M 0A 100M 5M 75M 100M 90M 90M 99M 90M 0#
15 16
0 0N# NaN
Wenn Sie Ihren Bereich bis zur letzten Reihe schneiden, funktioniert es:
In [421]:
for col in df.columns[2:-1]:
df[col] = df[col].str.extract(r'(\d+\.*\d*)').astype(np.float)
df
Out[421]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0 'Name' 97.7 0 0 65 0 100 5 75 100 90 90 99 90 0 0 NaN
Alternativ können Sie einfach die Spalten auswählen, die object
dtype sind, und den Code ausführen (die erste Spalte überspringen, da dies der Eintrag 'Name' ist)
In [428]:
for col in df.select_dtypes([np.object]).columns[1:]:
df[col] = df[col].str.extract(r'(\d+\.*\d*)').astype(np.float)
df
Out[428]:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
0 'Name' 97.7 0 0 65 0 100 5 75 100 90 90 99 90 0 0 NaN
In diesem Fall müssen wir die str.replace()
-Methode für diese Serie verwenden, aber zuerst müssen wir sie in str
type konvertieren:
df1.Patient = 's125','s45',s588','s244','s125','s123'
df1 = pd.read_csv("C:\\Users\\Gangwar\\Desktop\\competitions\\cancer prediction\\kaggle_to_students.csv")
df1.Patient = df1.Patient.astype(str)
df1['Patient'] = df1['Patient'].str.replace('s','').astype(int)
Ich habe diesen Fehler bei der Arbeit in Eclipse erhalten. Es stellte sich heraus, dass der Projektinterpreter irgendwie (nach einem Update, glaube ich) auf Python 2.7 zurückgesetzt wurde. Durch das Zurücksetzen auf Python 3.6 wurde dieses Problem behoben. Dies führte zu mehreren Abstürzen, Neustarts und Warnungen. Nach einigen Minuten der Probleme scheint es jetzt behoben zu sein.
Obwohl ich weiß, dass dies keine Lösung für das hier gestellte Problem ist, dachte ich, dass es für andere nützlich sein könnte, da ich auf diese Seite kam, nachdem ich nach diesem Fehler gesucht hatte.