Skip to main content
 首页 » 编程设计

python之如果字符串是数字转换为 float ,否则放入新列

2025年05月04日41over140

df = pd.DataFrame( data = {"CouponCode": ["1","2","3","Winter14","5"] } ) 

我想获取上面的数据框并得到下面的数据框。我希望 CouponCode 列中的所有数字都转换为 float 或整数,如果该值不是数字,我想将其放入新的列名 couponName 中(我将“nan”作为字符串输入,但我当然想要它们是“真正的”空值)。

df_new = pd.DataFrame(data = {"CouponCode": [1,2,3,"Winter14",5], "CouponName": ["nan", "nan", "nan", "Winter14", "nan"]} ) 

请您参考如下方法:

计划

  • 使用 pd.to_numeric 应用于 'CouponCode' 的每个单独元素。这很慢!我为什么要这样做?因为这是我所知道的确保 int 映射到 int、float 到 float 以及str 到 str。结果列的 dtype 将是 object。我本可以使用 errors='coerce' 在整个列上执行 pd.to_numeric,问题是 nan 会转换 int 到 float。
  • 使用 .str.is_numeric 确定哪些是字符串,并将它们移植到新列。

df.loc[~df.CouponCode.astype(str).str.isnumeric(), 'CouponName'] = df.CouponCode 
df.loc[:, 'CouponCode'] = df.CouponCode.apply(pd.to_numeric, errors='ignore') 
df 
 
  CouponCode CouponName 
0          1        NaN 
1          2        NaN 
2          3        NaN 
3   Winter14   Winter14 
4          5        NaN 

df.to_dict('list') 
 
{'CouponCode': [1, 2, 3, 'Winter14', 5], 
 'CouponName': [nan, nan, nan, 'Winter14', nan]}