无法在python数据帧中将列类型从object转换为str

ton*_*ibm 4 python type-conversion dataframe

我已经下载了一个csv文件,然后将其读取到python数据帧,现在所有4列都有对象类型,我想将它们转换为str类型,

在此输入图像描述

现在dtypes的结果如下:

Name                      object
Position Title            object
Department                object
Employee Annual Salary    object
dtype: object
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法更改类型:

path['Employee Annual Salary'] = path['Employee Annual Salary'].astype(str)
Run Code Online (Sandbox Code Playgroud)

但dtypes仍然返回类型对象,我也尝试在读取csv时提供列类型,

path = pd.read_csv("C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\city-of-chicago-salaries.csv",dtype={'Employee Annual Salary':str})
Run Code Online (Sandbox Code Playgroud)

要么

path = pd.read_csv("C:\\Users\\IBM_ADMIN\\Desktop\\ml-1m\\city-of-chicago-salaries.csv",dtype=str)
Run Code Online (Sandbox Code Playgroud)

但仍然无法工作,想知道如何将列类型从对象更改为str,

Fel*_*lix 22

实际上你可以将列的类型设置为string。使用.astype('string')而不是.astype(str).

样本数据集

df = pd.DataFrame(data={'name': ['Bla',None,'Peter']})
Run Code Online (Sandbox Code Playgroud)

列名称默认为 a object

单柱解决方案

df.name = df.name.astype('string')
Run Code Online (Sandbox Code Playgroud)

重要的是要写.astype('string'),而不是.astype(str)那些对我不起作用的东西。它将保持object原样。

多列解决方案

df = df.astype(dtype={'name': 'string'})
Run Code Online (Sandbox Code Playgroud)

允许一次更改多个字段。


Owe*_*wen 8

对于字符串,列类型将始终为"对象".没有必要转换任何东西; 它已经在做你需要的了.

类型来自numpy,它有一组数字数据类型.其他任何东西都是一个对象.

您可能需要阅读http://nbviewer.jupyter.org/github/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/02.01-UnderstandingANN-Types.ipynb以获得更全面的解释.


小智 7

请用: -

df = df.convert_dtypes()

它将自动转换为合适的类型。它会起作用的。