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''
プレフィックスを削除するにはどうすればよいですか?
ベクトル化された 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]
df['COLUMN1'].apply(lambda x: x.decode("utf-8"))
df.columns = [x.decode("utf-8") for x in df.columns]
これにより、より速く簡単になります。