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
我正在从包含各种类型的列的 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