Python-基于dataframe列中的数据将对象数据类型转换为整数、字符串或浮点
我有以下问题。我有一个dataframe,它有各种类型的列(int、float、string等),但由于它们是使用.csv文件导入python的,所以所有列都显示为Python-基于dataframe列中的数据将对象数据类型转换为整数、字符串或浮点,python,pandas,numpy,Python,Pandas,Numpy,我有以下问题。我有一个dataframe,它有各种类型的列(int、float、string等),但由于它们是使用.csv文件导入python的,所以所有列都显示为object数据类型。示例如下: print df_centers 输出: center name ID state activity type cost usage Bay area recreational facility 10019 LA swimming
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%
所有这些列都有data type=object,我正在尝试将对象数据类型转换为它们相关且更有意义的数据类型。示例如下:
df_centers['cost'] = df_centers['cost'].astype('int')
我尝试在cost字段上进行INT转换的原因是我以后必须对其进行一些分析,但python返回时会显示以下错误消息:
ValueError: invalid literal for long() with base 10: '$15'
df_centers['usage'] = df_centers['usage'].astype('float')
我还尝试将使用率转换为0.5%以浮动,如下所示,它返回错误消息:
ValueError: invalid literal for long() with base 10: '$15'
df_centers['usage'] = df_centers['usage'].astype('float')
我得到的结果是:
invalid literal for float(): 100%
关于如何将数据类型从对象转换为更相关的类型,有什么建议吗?通常在CSV文件中,如果它不是逗号分隔的,而是Excel文件等,“对象”有一个类型和值,可以帮助您破译内容 在此期间,要将货币值转换为数字,请去掉前导的“$”并转换为float。对于百分比,去掉%,将数字转换为浮点,然后除以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
# ^^^^^^^^^^^^^^^^
通常在CSV文件中,如果不是逗号分隔的,而是Excel文件等,“对象”有一个类型和值,可以帮助您破译内容 在此期间,要将货币值转换为数字,请去掉前导的“$”并转换为float。对于百分比,去掉%,将数字转换为浮点,然后除以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
# ^^^^^^^^^^^^^^^^
看见您可以对货币使用类似的方法。$XX和XX%是str
df.cost=df.cost.str[1://code>df.usage=df.usage.str[:-1]
非常感谢温和盖伦我用温家宝的建议去掉前面的$值或后面的%值,然后将它们转换为最相关的类型。再次谢谢你。您可以对货币使用类似的方法。$XX和XX%是strdf.cost=df.cost.str[1://code>df.usage=df.usage.str[:-1]
非常感谢温和盖伦我用温家宝的建议去掉前面的$值或后面的%值,然后将它们转换为最相关的类型。再次感谢Gary02127的建议,我尝试了一种更简单的方法,但也将尝试使用.lstrip和.rstrip。感谢你的回答,并给了你+1分,但这对熊猫不起作用。@cᴏʟᴅsᴘᴇᴇᴅ 很抱歉,我的回答不正确。我已经将我的答案更新为正确的pandas格式。非常感谢Gary02127的建议,我尝试了一种更简单的方法,但也将尝试使用.lstrip和.rstrip。感谢你的回答,并给了你+1分,但这对熊猫不起作用。@cᴏʟᴅsᴘᴇᴇᴅ 很抱歉,我的回答不正确。我已经更新了我的答案,使之符合正确的格式。