Python 熊猫:将列(价格数据)转换为整数
我写了一个函数,它的目的是将价格数据从美元转换成整数。很简单 每个条目上的数据格式如下所示(通过示例):$40.00、$1100.00等 注意:值得一提的是,在我进行任何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
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如果某些数据具有浮点,则可能需要上/下转换:)