Pandas Dataframe 中格式为 UTF-8 的字符串

String formatted as UTF-8 in Pandas Dataframe

我正在从包含各种类型的列的 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,但均无效。我最后的办法是用正则表达式手动删除编码。

如果您的列值确实是这样的字符串:"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