pandas 创建函数时出现问题,但函数未转换为float

wswtfjt7  于 2022-11-20  发布在  其他
关注(0)|答案(3)|浏览(136)

我试图创建一个函数英里到公里,但结果是浮动,并没有转换它。距离:是整数格式的数据行。
函数“miles_a_KM”接收参数miles,它是一个整数列。

def miles_to_KM(miles):
    MIc = 1.609344
    km = miles * MIc
    return(pd.DataFrame({'km':km}).fillna(0))

问题。

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [8], in <cell line: 1>()
----> 1 miles_to_KM('Distance')

Input In [7], in miles_to_KM(miles)
      1 def miles_to_KM(miles):
      2     MIc = 1.609344
----> 3     km = miles * MIc
      4     return(pd.DataFrame({'km':km}).fillna(0))

TypeError: can't multiply sequence by non-int of type 'float'

尝试

return(pd.DataFrame({'km':km}).astype(float).fillna(0))
4nkexdtk

4nkexdtk1#

看起来当您调用函数时,您的输入参数是字符串。不确定您是否只想将列中的1个值转换为英里,但是,要从 Dataframe 访问值,您可能需要尝试miles_to_KM(dataframename.iloc[0]["Distance"]
该错误来自于尝试将字符串值乘以浮点数,这可能是使用整数(如

def mile_to_KM(miles):
     MIc = 2
     return MIc * miles

所以mile_to_KM("Distance")会输出Distance Distance。希望这能让错误消息更有意义,因为使用浮点数乘字符串不会计算。

2w3rbyxf

2w3rbyxf2#

为什么不直接使用pandas.Series.div呢?

#dataset: http://ksgleditsch.com/data/capdist.csv

MIc = 1.60934

df["milesdist"]= df["kmdist"].div(MIc).round(2)
#输出:
print(df)

   ida  idb  kmdist  milesdist
0  UKR  TUR    1231     764.91
1  FIN  NIC    9962    6190.12
2  SUR  BUI    9430    5859.54
3  CAN  ZAN   12416    7714.96
4  SYR  MSI   13081    8128.18
5  BEL  CHN    8080    5020.69
6  NEP  NTH    7034    4370.74
7  GRG  GFR    3119    1938.06
8  TKM  THI    4953    3077.66
9  AZE  BOS    2611    1622.40
643ylb08

643ylb083#

解决问题的办法

def miles_to_KM(miles):
    MIc = 1.609344
    return(miles * MIc)

df['kilometer'] = df['Distance'].transform(miles_to_KM)
df['kilometer'].head(3)

相关问题