Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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 熊猫:将列(价格数据)转换为整数_Python_Pandas - Fatal编程技术网

Python 熊猫:将列(价格数据)转换为整数

Python 熊猫:将列(价格数据)转换为整数,python,pandas,Python,Pandas,我写了一个函数,它的目的是将价格数据从美元转换成整数。很简单 每个条目上的数据格式如下所示(通过示例):$40.00、$1100.00等 注意:值得一提的是,在我进行任何astype()更改之前,数据类型最初是一个对象 def convert_price(df): df['price'] = df['price'].str.replace('$', '') df['price'] = df['price'].str.replace(',', '') # these two li

我写了一个函数,它的目的是将价格数据从美元转换成整数。很简单

每个条目上的数据格式如下所示(通过示例):$40.00、$1100.00等

注意:值得一提的是,在我进行任何
astype()
更改之前,数据类型最初是一个对象

def convert_price(df):
    df['price'] = df['price'].str.replace('$', '') 
    df['price'] = df['price'].str.replace(',', '') # these two lines remove unwanted symbols. Leaving me with a '1100.00' for example
    df['price'] = df['price'].astype('Int64') # convert data to int. 
    return df
我收到一个错误:无法将对象转换为IntegerDtype

正如前面在一个SoF问题中提到的那样,我尝试通过先转换为float,然后转换为int来解决这个问题:

def convert_price(df):
    df['price'] = df['price'].str.replace('$', '')
    df['price'] = df['price'].str.replace(',', '')
    df['price'] = df['price'].astype('float')
    df['price'] = df['price'].astype('Int64')
    return df
新错误:无法将非等效float64安全地强制转换为int64

然后我搜索了可能丢失的值:

df[['price']].isna().sum()
output:
price    0
dtype: int64
没有找到,但尽管我发现了错误, 检查序列的数据类型将返回“int64”

谁能给我解释一下这里到底发生了什么。如上所述,调用函数来表达它时,我得到了一些错误。但是输出似乎已经给出了我想要的结果

编辑:小数据样本


这段代码对我来说很好。我只是使用了float()和int()而不是您使用的astype()方法

import pandas as pd

def convert_price(df):
   df['price'] = df['price'].replace('$', '')
    df['price'] = df['price'].replace(',', '')
    df['price'] = float(df['price'])
    df['price'] = int(df['price'])
    return df

data = {
  "price": "$1,100.00"
}

df = pd.DataFrame(data, index = ["price"])
print(convert_price(df['price']))

这个代码对我来说很好用。我只是使用了float()和int()而不是您使用的astype()方法

import pandas as pd

def convert_price(df):
   df['price'] = df['price'].replace('$', '')
    df['price'] = df['price'].replace(',', '')
    df['price'] = float(df['price'])
    df['price'] = int(df['price'])
    return df

data = {
  "price": "$1,100.00"
}

df = pd.DataFrame(data, index = ["price"])
print(convert_price(df['price']))

可能存在一些无法直接转换为int64的值,如
“$12.34”

因此,我建议您向上或向下播放每个数字。向上投射可以通过
四舍五入(小数=浮点\u点\u大小)
解决

这是一个向上投射的示例代码

将熊猫作为pd导入
df=pd.DataFrame({“价格”:['$40.00','$1100.00','$12.34']})
df['price']=df['price'].str.replace('$','')
df['price']=df['price'].str.replace(',','')
df['price']=df['price'].astype('float')
#----补充-------
df=df.四舍五入(小数=0)
# ---------------------
df['price']=df['price'].astype('Int64')
如果您看到
df

价格 0 40 1. 1100 2. 12
可能存在一些无法直接转换为int64的值,如
“$12.34”

因此,我建议您向上或向下播放每个数字。向上投射可以通过
四舍五入(小数=浮点\u点\u大小)
解决

这是一个向上投射的示例代码

将熊猫作为pd导入
df=pd.DataFrame({“价格”:['$40.00','$1100.00','$12.34']})
df['price']=df['price'].str.replace('$','')
df['price']=df['price'].str.replace(',','')
df['price']=df['price'].astype('float')
#----补充-------
df=df.四舍五入(小数=0)
# ---------------------
df['price']=df['price'].astype('Int64')
如果您看到
df

价格 0 40 1. 1100 2. 12
您的代码很好,如果您只是将astype(“Int64”)更改为astype(“Int64”)(不带大写字母I),那么它正在运行

import pandas as pd
data = {"price" : ["$40.00", "1,000.00"]}
df_data = pd.DataFrame(data)

df_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   price   2 non-null      object
dtypes: object(1)
memory usage: 144.0+ bytes

def convert_price(df):
df['price'] = df['price'].str.replace('$', '')
df['price'] = df['price'].str.replace(',', '')
df['price'] = df['price'].astype('float')
df['price'] = df['price'].astype('int64') # without capital I
return df

convert_price(df_data) 

df_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   price   2 non-null      int64
dtypes: int64(1)
memory usage: 144.0 bytes
将熊猫作为pd导入
数据={“价格”:[“$40.00”,“1000.00”]}
df_data=pd.DataFrame(数据)
df_data.info()
范围索引:2个条目,0到1
数据列(共1列):
#列非空计数数据类型
---  ------  --------------  ----- 
0价格2非空对象
数据类型:对象(1)
内存使用:144.0+字节
def转换价格(df):
df['price']=df['price'].str.replace('$','')
df['price']=df['price'].str.replace(',','')
df['price']=df['price'].astype('float')
df['price']=df['price'].astype('int64')#不带大写字母I
返回df
转换价格(df_数据)
df_data.info()
范围索引:2个条目,0到1
数据列(共1列):
#列非空计数数据类型
---  ------  --------------  -----
0价格2非空int64
数据类型:int64(1)
内存使用:144.0字节

您的代码很好,如果您只是将astype(“Int64”)更改为astype(“Int64”)(不带大写字母I),那么它正在运行

import pandas as pd
data = {"price" : ["$40.00", "1,000.00"]}
df_data = pd.DataFrame(data)

df_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   price   2 non-null      object
dtypes: object(1)
memory usage: 144.0+ bytes

def convert_price(df):
df['price'] = df['price'].str.replace('$', '')
df['price'] = df['price'].str.replace(',', '')
df['price'] = df['price'].astype('float')
df['price'] = df['price'].astype('int64') # without capital I
return df

convert_price(df_data) 

df_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   price   2 non-null      int64
dtypes: int64(1)
memory usage: 144.0 bytes
将熊猫作为pd导入
数据={“价格”:[“$40.00”,“1000.00”]}
df_data=pd.DataFrame(数据)
df_data.info()
范围索引:2个条目,0到1
数据列(共1列):
#列非空计数数据类型
---  ------  --------------  ----- 
0价格2非空对象
数据类型:对象(1)
内存使用:144.0+字节
def转换价格(df):
df['price']=df['price'].str.replace('$','')
df['price']=df['price'].str.replace(',','')
df['price']=df['price'].astype('float')
df['price']=df['price'].astype('int64')#不带大写字母I
返回df
转换价格(df_数据)
df_data.info()
范围索引:2个条目,0到1
数据列(共1列):
#列非空计数数据类型
---  ------  --------------  -----
0价格2非空int64
数据类型:int64(1)
内存使用:144.0字节

您是否也尝试过删除圆点(“.”)呢?请添加您的约会对象的样子样本,是的。我的想法是去掉“.”,然后除以100。但我收到了一个错误。你也试过删除点(“.”)吗?请添加一个你约会的样子样本,是的。我的想法是去掉“.”,然后除以100。但是我收到了一个错误。谢谢你的建议,但是我得到了以下错误:TypeError:无法转换序列感谢你的建议,但是我得到了以下错误:TypeError:无法将序列转换为你的意思是斯塔克。看来这已经成功了。我会仔细检查df,看看alll是否正确well@DropKick如果某些数据有浮点,可能需要上/下转换:)你是说斯塔克。看来这已经成功了。我会仔细检查df,看看alll是否正确well@DropKick如果某些数据具有浮点,则可能需要上/下转换:)