【问题标题】:Converting a string to number in jupyter在jupyter中将字符串转换为数字
【发布时间】:2021-08-06 05:30:44
【问题描述】:

这是我的代码:

def value_and_wage_conversion(value):
    if isinstance(value,str):
        if 'M' in out:
            out = float(out.replace('M', ''))*1000000
        elif 'K' in value:
            out = float(out.replace('K', ''))*1000
        return float(out)

fifa_18['Value'] = fifa_18['Value'].apply(lambda x: value_and_wage_conversion(x))
fifa_18['Wage'] = fifa_18['Wage'].apply(lambda x: value_and_wage_conversion(x))

这是错误信息:

----------------------------------- ---------------------------- UnboundLocalError Traceback(最近调用 最后)在 7 返回浮点数(出) 8 ----> 9 fifa_18['Value'] = fifa_18['Value'].apply(lambda x: value_and_wage_conversion(x)) 10 fifa_18['Wage'] = fifa_18['Wage'].apply(lambda x: value_and_wage_conversion(x))

c:\users\brain\appdata\local\programs\python\python39\lib\site-packages\pandas\core\series.py 在应用(自我,函数,convert_dtype,args,**kwds)4136
否则:4137 个值 = self.astype(object)._values -> 4138 mapped = lib.map_infer(values, f, convert=convert_dtype) 4139 4140 if len(mapped) and isinstance(mapped[0], 系列):

pandas_libs\lib.pyx in pandas._libs.lib.map_infer()

在 (x) 7 返回浮点数(出) 8 ----> 9 fifa_18['Value'] = fifa_18['Value'].apply(lambda x: value_and_wage_conversion(x)) 10 fifa_18['Wage'] = fifa_18['Wage'].apply(lambda x: value_and_wage_conversion(x))

在 value_and_wage_conversion(value) 1 def value_and_wage_conversion(value): 2 如果是实例(值,str): ----> 3 如果 'M' 进出: 4 out = float(out.replace('M', ''))*1000000 5 elif 'K' 的值:

UnboundLocalError:赋值前引用了局部变量“out”

【问题讨论】:

  • if 'M' in out: 更改为if 'M' in value:
  • 第三行:if 'M' in out: 你想拥有if 'M' in value: 此外,第二行:if isinstance(value,str): 应该是if isinstance(value:str):
  • 显示此错误:文件“”,第 2 行 if isinstance(value:str): ^ SyntaxError: invalid syntax

标签: pandas


【解决方案1】:

你快到了,但你需要修复你的功能

例如

import numpy as np
import pandas as pd

# generate a random sample
values = ['10M', '10K', 10.5, '200M', '200K', 200]
size = 100
np.random.seed(1)
df = pd.DataFrame({
    'Value': np.random.choice(values, size),
    'Wage': np.random.choice(values, size),
})

print(df)

   Value  Wage
0    200   200
1   200M  200M
2   200K   200
3    10M   10M
4    10K  200M
..   ...   ...
95  200K   200
96   200  200M
97  10.5  200K
98  200K  10.5
99  200M   10M

[100 rows x 2 columns]

定义函数并应用

def value_and_wage_conversion(value):
    if isinstance(value, str):
        if 'M' in value:
            value = float(value.replace('M', ''))*1000000
        elif 'K' in value:
            value = float(value.replace('K', ''))*1000
        return float(value)

df['Value'] = df['Value'].apply(lambda x: value_and_wage_conversion(x))
df['Wage'] = df['Wage'].apply(lambda x: value_and_wage_conversion(x))

print(df)

          Value         Wage
0         200.0        200.0
1   200000000.0  200000000.0
2      200000.0        200.0
3    10000000.0   10000000.0
4       10000.0  200000000.0
..          ...          ...
95     200000.0        200.0
96        200.0  200000000.0
97         10.5     200000.0
98     200000.0         10.5
99  200000000.0   10000000.0

[100 rows x 2 columns]

然后检查

df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 2 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   Value   100 non-null    float64
 1   Wage    100 non-null    float64
dtypes: float64(2)
memory usage: 1.7 KB

【讨论】:

  • 看看我有什么:------------------------------------ -------------------------------------- NameError Traceback (最近一次调用最后一次) in 7 return float(value) 8 ----> 9 fifa_2018['ValueNum'] = fifa_2018['Value'].apply(lambda x: value_and_wage_conversion(x)) 10 fifa_2018[' WageNum'] = fifa_2018['Wage'].apply(lambda x: value_and_wage_conversion(x)) 11 print(fifa_2018) NameError: name 'fifa_2018' is not defined
  • fifa_18 不是你的 DataFrame 的名称吗?您可以仔细检查您是否使用了正确的 DataFrame 名称。
  • def value_and_wage_conversion(value): if isinstance(value,str): if 'M' in value: value = float(value.replace('M', ''))*1000000 elif 'K ' in value: value = float(value.replace('K', ''))*1000 return float(value) fifa_18['ValueNum'] = fifa_18['Value'].apply(lambda x: value_and_wage_conversion(x) ) fifa_18['WageNum'] = fifa_18['Wage'].apply(lambda x: value_and_wage_conversion(x))
  • 我看不到以这种方式编写的缩进和新行。 defreturn 行结束,对吧?
  • 有压痕
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 2019-10-10
  • 2014-02-25
  • 2023-03-25
相关资源
最近更新 更多