【问题标题】:Convert bytes to string implicitly in Pandas dataframe (Python 3.6)在 Pandas 数据帧中隐式将字节转换为字符串(Python 3.6)
【发布时间】:2018-07-17 02:37:45
【问题描述】:
import pandas as pd
#Define Dataframe

d = {'cola': ['cola1', 'cola2', 'cola3', 'cola4', 'cola4']
    , 'colb': [b'colb1', b'colb2', b'colb3', b'colb4', b'colb4']
    , 'colc': ['colc1', 'colc2', 'colc3', 'colc4', 'colc4']
    , 'cold': [b'cold1', b'cold2', b'cold3', b'cold4', b'cold4']
  }
df = pd.DataFrame(data=d)

#Create flatfile from dataframe
df.to_csv('converted_file.txt', sep='|',index=False)

我想将字节转换为字符串,即在创建输出文件之前删除“b”前缀。

我尝试了这里提到的解决方案:How to translate "bytes" objects into literal strings in pandas Dataframe, Python3.x?

str_df = df.select_dtypes([np.object])
str_df = str_df.stack().str.decode('utf-8').unstack()
for col in str_df:
    df[col] = str_df[col]

虽然它适用于 [colb] 和 [cold] 列,但 [cola] 和 [colc] 列是空白的。这主要是因为所有 4 列都是对象类型。我不确定如何仅隐式选择列 [colb] 和 [cold] 然后应用解码功能。由于数据帧是从 SQL 查询的输出创建的,因此需要隐式选择这两列进行解码。

有没有人遇到过这种情况并可以提出解决方案?

提前致谢!

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    演示:

    In [12]: df
    Out[12]:
        cola      colb   colc      cold
    0  cola1  b'colb1'  colc1  b'cold1'
    1  cola2  b'colb2'  colc2  b'cold2'
    2  cola3  b'colb3'  colc3  b'cold3'
    3  cola4  b'colb4'  colc4  b'cold4'
    4  cola4  b'colb4'  colc4  b'cold4'
    
    In [13]: df.applymap(lambda x: x.decode() if isinstance(x, bytes) else x)
    Out[13]:
        cola   colb   colc   cold
    0  cola1  colb1  colc1  cold1
    1  cola2  colb2  colc2  cold2
    2  cola3  colb3  colc3  cold3
    3  cola4  colb4  colc4  cold4
    4  cola4  colb4  colc4  cold4
    

    【讨论】:

    • 感谢@MaxU 的回复!但是,它对我不起作用。我了解代码试图做什么,并且 isinstance 函数在 applymap 函数之外时起作用。我是否需要导入任何库才能使 applymap 工作?
    • 再次感谢您的帮助@MaxU。这在我这样做时有效: df = df.applymap(lambda x: x.decode() if isinstance(x, bytes) else x)
    猜你喜欢
    • 2020-06-10
    • 2014-06-07
    • 1970-01-01
    • 2016-11-01
    • 2021-12-18
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    相关资源
    最近更新 更多