Pandas中DataFrame的object列转string失败且数据异常,求解决方案
解决DataFrame列转string类型及西里尔字母显示问题
1. 正确转为string类型(替代astype(str))
astype(str)本质还是把列转为object类型的字符串集合,pandas有专门的string dtype来区分普通object列:
- 方法一:使用
pd.StringDtype()
import pandas as pd data['Discipline'] = data['Discipline'].astype(pd.StringDtype())
- 方法二:简写形式
astype('string')
data['Discipline'] = data['Discipline'].astype('string')
转换完成后用data.dtypes查看,该列会明确显示为string类型,不再是object。
2. 处理西里尔字母显示异常
如果转换后仅显示西里尔字母,大概率是编码问题或原始数据的字符编码不匹配:
- 若数据从文件读取,读取时指定西里尔字符常用编码(如
cp1251或utf-8):
data = pd.read_csv('your_data_file.csv', encoding='cp1251')
- 数据已在DataFrame中时,尝试强制转换编码:
data['Discipline'] = data['Discipline'].apply(lambda x: x.encode('cp1251').decode('utf-8') if isinstance(x, str) else x)
注意:如果原始数据是utf-8编码,调换encode和decode的参数顺序即可。
3. 验证转换结果
执行操作后,用以下代码确认类型和数据状态:
print(data['Discipline'].dtype) print(data['Discipline'].head())
内容的提问来源于stack exchange,提问作者Сергей Корягин
相关产品推荐
相关产品推荐

