能否使用.astype函数为混合数据类型的列传递值名称?
问题解答
关于astype()函数的使用
- 不能直接给混合数据类型的列传递“值名称”来实现转换。
astype()的核心作用是转换整个列的数据类型,参数需要是数据类型对象(比如str、int、float,或者pd.CategoricalDtype()这类类型定义),而非列中的具体值名称。 - 如果需要对列内特定混合值做类型映射,要先通过
replace()完成值的替换,再用astype()统一转换类型。示例:# 先替换目标值,再转换类型 df['mixed_col'] = df['mixed_col'].replace({'approved': 1, 'rejected': 0}).astype(int)
关于你的可视化代码问题
你提供的代码中,'Complaint Type'和'City'属于分类文本列,但你用了sns.distplot()(当前seaborn推荐用displot)——这个函数是用来展示数值型数据分布的,用在分类列上要么报错,要么得到无意义的结果。
针对分类列,应使用柱状图展示类别数量分布,修改后的代码示例:
import seaborn as sns import matplotlib.pyplot as plt cat_cols = ['Complaint Type', 'City'] for i in range(0, len(cat_cols), 2): plt.figure(figsize=(10,4)) plt.subplot(121) # 用countplot展示分类列的数量分布,按数量排序避免杂乱 sns.countplot(x=citynan_df[cat_cols[i]], order=citynan_df[cat_cols[i]].value_counts().index) plt.xticks(rotation=45) # 旋转标签防止重叠 plt.subplot(122) sns.countplot(x=citynan_df[cat_cols[i+1]], order=citynan_df[cat_cols[i+1]].value_counts().index) plt.xticks(rotation=45) plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者MrM
相关产品推荐
相关产品推荐

