J'ai un DataFrame Pandon3.x pandas dont certaines colonnes sont des chaînes qui sont exprimées en octets (comme dans Python2.x)
import pandas as pd
df = pd.DataFrame(...)
df
COLUMN1 ....
0 b'abcde' ....
1 b'dog' ....
2 b'cat1' ....
3 b'bird1' ....
4 b'elephant1' ....
Quand j'accède par colonne avec df.COLUMN1
, je vois Name: COLUMN1, dtype: object
Cependant, si j'accède par élément, il s'agit d'un objet "octets"
df.COLUMN1.ix[0].dtype
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'dtype'
Comment puis-je les convertir en chaînes "normales"? Comment puis-je me débarrasser de ce préfixe b''
?
Vous pouvez utiliser vectorized str.decode
pour décoder des chaînes d'octets en chaînes ordinaires:
df['COLUMN1'].str.decode("utf-8")
Pour ce faire pour plusieurs colonnes, vous pouvez sélectionner uniquement les colonnes str:
str_df = df.select_dtypes([np.object])
convertir tous:
str_df = str_df.stack().str.decode('utf-8').unstack()
Vous pouvez ensuite échanger les colonnes converties avec les colonnes df d'origine:
for col in str_df:
df[col] = str_df[col]
df['COLUMN1'].apply(lambda x: x.decode("utf-8"))