无法在python数据框中将列类型从对象转换为str

Posted

技术标签:

【中文标题】无法在python数据框中将列类型从对象转换为str【英文标题】:can not convert column type from object to str in python dataframe 【发布时间】:2017-04-29 20:44:10 【问题描述】:

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

现在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,

【问题讨论】:

***.com/questions/21018654/…的可能重复 那个链接对我有帮助,那么另一个问题是:如何从列员工年薪中删除“$”,然后将其转换为浮点类型? 我找到了replace失败的原因,正确的方法是:path['Employee Annual Salary'] = path['Employee Annual Salary'].str.replace('$', ''),我以前没有在replace前面加str, 【参考方案1】:

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

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

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

【讨论】:

我尝试从员工年薪列中删除'$',如果我直接使用替换,它不起作用, object其实是给str的,所以不用转成str类型,【参考方案2】:

其实你可以将列的类型设置为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')

允许一次更改多个字段。

【讨论】:

当我使用.astype('string'),我得到这个错误 -> TypeError: data type 'string' not understood pandas 版本 -> 0.25.3【参考方案3】:

请使用:--

df = df.convert_dtypes()

它会自动转换为合适的类型。 它应该工作。

【讨论】:

【参考方案4】:

我认为 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 显示为一列。

所以底线是我认为你很好。

【讨论】:

员工年薪一栏有'$',我想去掉,用replace后,不行, object其实是给str的,所以不用astype转成str,【参考方案5】:

我同意上述答案。您不需要将对象转换为字符串。但是,如果您需要将大量列转换为另一种数据类型(例如 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)

【讨论】:

以上是关于无法在python数据框中将列类型从对象转换为str的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫数据框中将纪元列值转换为时间

pyspark 在循环中将数组转换为字符串

在 Python 中将 Excel 列类型从 Int 转换为 String

Python:在数据框列中将秒转换为日期时间格式

在python中将对象数据类型转换为字符串问题

在熊猫数据框中将不同的日期时间格式转换为 MM/DD/YYYY 格式