Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-基于dataframe列中的数据将对象数据类型转换为整数、字符串或浮点_Python_Pandas_Numpy - Fatal编程技术网

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

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

我有以下问题。我有一个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    $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%是str
df.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ᴘᴇᴇᴅ 很抱歉,我的回答不正确。我已经更新了我的答案,使之符合正确的格式。