【问题标题】:String formatted as UTF-8 in Pandas DataframePandas Dataframe 中格式化为 UTF-8 的字符串
【发布时间】:2020-10-22 19:26:14
【问题描述】:

我正在读取包含各种类型列的 CSV 文件。

df = pd.read_csv('file_name.csv')
df.head()[columnname]
0    b'Hi,\r\n\r\nI hope you are well.'
1    b"\xc2\xa0Hello,\r\n\xc2\xa0\r\n "
2    b"\r\n\r\n blah blah blah"
3    NaN
4    b'blah blah blah'
Name: columnname, dtype: object

据我了解,b'' 格式意味着它是一个字节字符串,我必须将其.decode('utf-8') 转换为 ascii 格式的字符串,并删除 b'' 以及像 \xc2\xa0 这样的编码。但是,当我尝试解码时,出现错误。

df[columnname] = df[columnname].apply(lambda x: x.decode('utf-8'))
AttributeError: 'str' object has no attribute 'decode'

我认为发生了什么是从 csv 文件读取时,该列设置为str 数据类型,例如"b'Hi...'"。所以我检查了原始的 CSV 文件,我看到了previous_column,"b'Hi....'", next_column。有没有办法将此列正确读取为字节字符串,以便我以后可以调用解码函数?

我还尝试在pd.read_csv() 函数中为该特定列设置dtype=np.bytes_,并在读取csv 后调用df.astype,但都不起作用。我最后的手段是使用正则表达式手动删除编码。

【问题讨论】:

  • 您能给我们展示一下 CSV(或其中的一小部分)进行测试吗?该列似乎是 python bytes 对象的字符串表示形式。那是该列中应该包含的内容吗?在 CSV 中拥有它有点奇怪,但也许这就是目的。

标签: python pandas dataframe utf-8 ascii


【解决方案1】:

如果您的列值真的是这样的字符串:"b'some string'",那么您可以尝试在它们上应用ast.literal_eval

from ast import literal_eval

df['columnname'] = df['columnname'].fillna("b''").apply(lambda x: literal_eval(x).decode('utf-8'))
print(df)

应该打印:

   index                       columnname
0      1  Hi,\r\n\r\nI hope you are well.
1      2                 Hello,\r\n \r\n 
2      3          \r\n\r\n blah blah blah
3      4                                 
4      5                   blah blah blah

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多