Pandas数据帧中格式化为UTF-8的字符串



我正在读取一个CSV文件,其中包含各种类型的列。

df = pd.read_csv('file_name.csv')
df.head()[columnname]
0    b'Hi,rnrnI hope you are well.'
1    b"xc2xa0Hello,rnxc2xa0rn "
2    b"rnrn blah blah blah"
3    NaN
4    b'blah blah blah'
Name: columnname, dtype: object

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

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。有没有一种方法可以正确地将此列读取为字节字符串,以便稍后调用decode函数?

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

如果您的列值真的是这样的字符串:"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,rnrnI hope you are well.
1      2                 Hello,rn rn 
2      3          rnrn blah blah blah
3      4                                 
4      5                   blah blah blah

相关内容

  • 没有找到相关文章

最新更新