我有以下问题。我有一个具有各种类型的列(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%
关于如何将这种数据类型转换从对象转换为更相关的类型的任何建议?
答案 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
# ^^^^^^^^^^^^^^^^