web-dev-qa-db-fra.com

Comment traduire des objets "octets" en chaînes littérales dans Pandas Dataframe, Python3.x?

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''

7
ShanZhengYang

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]
20
EdChum
df['COLUMN1'].apply(lambda x: x.decode("utf-8"))
1
Yu Zhou