我正在读取一个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