web-dev-qa-db-ja.com

「バイト」オブジェクトをpandas Dataframe、Python3.xのリテラル文字列に変換する方法は?

Python3.x pandas DataFrameがあります。これにより、特定の列は(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'    ....

df.COLUMN1を使用して列でアクセスすると、Name: COLUMN1, dtype: objectが表示されます

ただし、要素でアクセスする場合は、「バイト」オブジェクトです

df.COLUMN1.ix[0].dtype
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bytes' object has no attribute 'dtype'

これらを「通常の」文字列に変換するにはどうすればよいですか?つまり、このb''プレフィックスを削除するにはどうすればよいですか?

13
ShanZhengYang

ベクトル化された str.decode バイト文字列を通常の文字列にデコードします。

df['COLUMN1'].str.decode("utf-8")

複数の列に対してこれを行うには、str列のみを選択できます。

str_df = df.select_dtypes([np.object])

それらすべてを変換する:

str_df = str_df.stack().str.decode('utf-8').unstack()

その後、変換された列を元のdf列と交換できます。

for col in str_df:
    df[col] = str_df[col]
29
EdChum
df['COLUMN1'].apply(lambda x: x.decode("utf-8"))
1
Yu Zhou
df.columns = [x.decode("utf-8") for x in df.columns]

これにより、より速く簡単になります。

1
Dinesh.hmn