无法在python数据帧

时间:2016-12-14 13:34:50

标签: python dataframe type-conversion

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

enter image description here

现在dtypes的结果如下:

Name                      object
Position Title            object
Department                object
Employee Annual Salary    object
dtype: object

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

path['Employee Annual Salary'] = path['Employee Annual Salary'].astype(str)

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

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

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

但仍然无效 想知道如何将列类型从object更改为str,

5 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:2)

请使用:--

df = df.convert_dtypes()

它会自动转换为合适的类型。 它行得通。

答案 2 :(得分:1)

我认为astype工作,只是因为你无法看到查看dtypes的更改结果。例如,

import pandas
data = [{'Name': 'Schmoe, Joe', 'Position Title': 'Dude', 'Department': 'Zip', 'Employee Annual Salary': 200000.00},
        {'Name': 'Schmoe, Jill', 'Position Title': 'Dudette', 'Department': 'Zam', 'Employee Annual Salary': 300000.00},
        {'Name': 'Schmoe, John', 'Position Title': 'The Man', 'Department': 'Piz', 'Employee Annual Salary': 100000.00},
        {'Name': 'Schmoe, Julie', 'Position Title': 'The Woman', 'Department': 'Maz', 'Employee Annual Salary': 150000.00}]
df = pandas.DataFrame.from_records(data, columns=['Name', 'Position Title', 'Department', 'Employee Annual Salary'] )

现在如果我在df上做dtypes,我看到:

In [32]: df.dtypes
Out[32]:
Name                       object
Position Title             object
Department                 object
Employee Annual Salary    float64
dtype: object

如果我这样做,

In [33]: df.astype(str)['Employee Annual Salary'].map(lambda x:  type(x))
Out[33]:
0    <type 'str'>
1    <type 'str'>
2    <type 'str'>
3    <type 'str'>
Name: Employee Annual Salary, dtype: object

我发现即使dtype显示为列,我的所有工资值现在都会浮动。

所以最重要的是我觉得你很好。

答案 3 :(得分:0)

我同意上述答案。您不需要将对象转换为字符串。但是,如果您需要将大量列转换为另一种数据类型(例如int),则可以使用以下代码:

object_columns_list = list(df.select_dtypes(include='object').columns)

for object_column in object_columns_list:
    df[object_column] = df[object_column].astype(int)

答案 4 :(得分:0)

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

样本数据集

df = pd.DataFrame(data={'name': ['Bla',None,'Peter']})

默认情况下,列名是object

单列解决方案

df.name = df.name.astype('string')

重要的是写.astype('string')而不是.astype(str)对我不起作用。它将保持为object

多列解决方案

df = df.astype(dtype={'name': 'string'})

允许一次更改多个字段。