Python - 根据dataframe列中的数据将对象数据类型转换为整数,字符串或浮点数

时间:2017-12-13 03:36:37

标签: python pandas numpy

我有以下问题。我有一个具有各种类型的列(int,float,string等)的数据框 - 但由于它们是使用.csv文件导入到python中的,因此所有列都显示为object数据类型。示例如下:

print df_centers

输出:

center name                      ID    state  activity type cost  usage
Bay area recreational facility  10019   LA       swimming    $15   0.5%
Ith area recreational facility  10020   NY       basketball  $200  100%

所有这些列都有数据类型=对象,我试图将对象数据类型转换为相关且更有意义的数据类型。示例如下:

df_centers['cost'] = df_centers['cost'].astype('int')

我尝试在成本字段上进行INT转换的原因是因为我必须稍后对其进行一些分析但python返回时出现以下错误消息:

ValueError: invalid literal for long() with base 10: '$15'

我还尝试将使用率转换为0.5%以使用以下内容浮动,并返回错误消息:

df_centers['usage'] = df_centers['usage'].astype('float')

我得到的输出是:

invalid literal for float(): 100%

关于如何将这种数据类型转换从对象转换为更相关的类型的任何建议?

1 个答案:

答案 0 :(得分:1)

通常在CSV文件中,如果它不仅是逗号分隔而是Excel文件等,那么"对象"有一种类型和价值可以帮助你破译什么。

在此期间,要将货币价值转换为数字,请剥离领先的' $'并转换为浮动。对于百分比,剥去%,将数字转换为浮点数,然后除以100。

所以,这个:

df_centers['cost']  = df_centers['cost'].astype('int')
df_centers['usage'] = df_centers['usage'].astype('float')

应该是:

df_centers['cost']  = df_centers['cost'].str.lstrip('$').astype('int')
#                                       ^^^^^^^^^^^^^^^^
df_centers['usage'] = df_centers['usage'].str.rstrip('%').astype('float') / 100.0
#                                        ^^^^^^^^^^^^^^^^