我已将以下 CSV 文件输入到 iPython Notebook 中:
public = pd.read_csv("categories.csv")
public
我还导入了 pandas 作为 pd,numpy 作为 np 和 matplotlib.pyplot 作为 plt。存在以下数据类型(以下是摘要 - 大约有 100 列)
In [36]: public.dtypes
Out[37]: parks object
playgrounds object
sports object
roading object
resident int64
children int64
我想将“公园”、“游乐场”、“运动”和“道路”更改为类别(它们中有李克特量表反应——尽管每一列都有不同类型的李克特反应(例如,“强烈同意”、“同意” “ 等,另一个有“非常重要”、“重要”等),其余部分为 int64。
我能够创建一个单独的数据框 - public1 - 并使用以下代码将其中一列更改为类别类型:
public1 = {'parks': public.parks}
public1 = public1['parks'].astype('category')
但是,当我尝试使用此代码一次更改一个数字时,我没有成功:
public1 = {'parks': public.parks,
'playgrounds': public.parks}
public1 = public1['parks', 'playgrounds'].astype('category')
尽管如此,我不想创建仅包含类别列的单独数据框。我希望它们在原始数据框中发生变化。
我尝试了多种方法来实现这一点,然后尝试了此处的代码: Change column type in pandas 。
public[['parks', 'playgrounds', 'sports', 'roading']] = public[['parks', 'playgrounds', 'sports', 'roading']].astype('category')
并收到以下错误:
NotImplementedError: > 1 ndim Categorical are not supported at this time
有没有办法将“公园”、“游乐场”、“运动”、“道路”更改为类别(这样就可以分析李克特量表的反应),留下“居民”和“儿童”(以及其他 94 个列) string, int + floats) 没有改变吗?
我正在使用 Python 2.7。
原文由 gincard 发布,翻译遵循 CC BY-SA 4.0 许可协议
有时,您只需要使用 for 循环: