我已将以下CSV文件馈送到iPython笔记本:
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
我想把‘公园’、‘操场’、‘运动’和‘道路’改成不同的类别(它们有likert量表反应——每个栏目都有不同类型的likert反应(例如,一个栏目有“强烈同意”、“同意”等,另一个栏目有“非常重要”、“重要”等),剩下的如int64。
我可以创建一个单独的dataframe-public1-并使用以下代码将其中一列更改为category类型:
public1 = {'parks': public.parks}
public1 = public1['parks'].astype('category')
但是,当我试图使用此代码同时更改一个数字时,却失败了:
public1 = {'parks': public.parks,
'playgrounds': public.parks}
public1 = public1['parks', 'playgrounds'].astype('category')
尽管如此,我不想创建只包含categories列的单独数据框。我希望在原始数据框中更改它们。
我尝试了很多方法来实现这一点,然后在这里尝试了代码:Pandas: change data type of columns。。。
public[['parks', 'playgrounds', 'sports', 'roading']] = public[['parks', 'playgrounds', 'sports', 'roading']].astype('category')
并得到以下错误:
NotImplementedError: > 1 ndim Categorical are not supported at this time
有没有办法把“公园”、“游乐场”、“运动”、“道路”改为类别(这样就可以分析利克特量表的反应),而不去碰“居民”和“儿童”(以及其他94个字符串、int+float列)?或者,有没有更好的方法?如果有人有任何建议和/或反馈,我将非常感激…我正在慢慢地秃头扯我的头发!
多谢提前。
编辑添加-我正在使用Python2.7。
您可以使用
pandas.DataFrame.apply
方法和lambda
表达式来解决这个问题。在你的例子中你可以使用我不知道如何就地执行,所以通常我会得到这样的结果:
显然,如果您不想选择某个数据类型的全部,可以用显式列名替换
.select_dtypes
(尽管在您的示例中,您似乎想要所有object
类型)。有时,您只需使用for循环:
不需要循环,Pandas现在可以直接执行,只需传递一个要转换的列列表,Pandas就会将它们全部转换。
相关问题 更多 >
编程相关推荐