【问题标题】:Convert string to float in dataframe using pandas使用熊猫将字符串转换为浮点数
【发布时间】:2020-10-01 04:59:04
【问题描述】:

我是 python 新手,正在练习 pandas。在我的数据框中有一个名为 NET_REVENUE 的列,它的类型是字符串。我正在尝试将其转换为浮点数以供进一步分析。

但是,当我运行以下代码时,它会给出我不太理解的反馈。 我很肯定原始列中没有缺失值。显然有些已成功转换为浮点数。但是 4732 中的 2918 不是。

有人可以帮忙吗?

sep_IM_2019['NET_REVENUE_numeric'] = pd.to_numeric(sep_IM_2019['NET_REVENUE'], errors='coerce')

/Users/Leo/opt/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:1: SettingWithCopyWarning:试图在一个副本上设置一个值 从 DataFrame 切片。尝试使用 .loc[row_indexer,col_indexer] = 取而代之的价值

请参阅文档中的注意事项: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy """启动 IPython 内核的入口点。

sep_IM_2019.NET_REVENUE_numeric.isnull().sum()
#2918


    sep_IM_2019.NET_REVENUE_numeric
8       NaN
46      NaN
56      NaN
62      NaN
71      NaN
         ..
76472   NaN
76476   NaN
76503   NaN
76505   NaN
76510   NaN
Name: NET_REVENUE_numeric, Length: 4732, dtype: float64

【问题讨论】:

    标签: python-3.x pandas type-conversion


    【解决方案1】:

    这个答案可能会帮助您理解警告 - https://stackoverflow.com/a/20627316/8231447

    至于转换为浮点数 - 我不确定您是要运行 to_numeric,还是在系列上调用 .astype(float)

    sep_IM_2019["NET_REVENUE_numeric"] = ]sep_IM_2019['NET_REVENUE'].astype(float).
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢@Adoni5,我真的想知道在我们可以获得的结果方面,b/w to_numeric 和 astype 的区别在哪里。
    【解决方案2】:

    您使用了errors='coerce',因此当它无法转换为浮点数时,它会给您一个 NaN 而不是引发错误。

    尝试在没有该参数的情况下运行to_numeric 以查看究竟是什么问题。您的某些字符串可能无法转换。仔细看看它们:

    sep_IM_2019.loc[8,'NET_REVENUE']
    

    如果我相信你的列表,应该是第一个有这个问题的字符串。

    【讨论】:

    • 在 csv 文件中,无法转换的值是“货币”,自动生成 1000 个逗号。在 csv 中将它们全部更改为“通用”后,我可以使用 to_numeric 或 astype 将所有值转换为没有 NaN 的浮点数。但是,我仍然得到与上述相同的警告:/Users/Leo/opt/miniconda3/lib/python3.7/site-packages/ipykernel_launcher.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a从 DataFrame 切片。尝试改用 .loc[row_indexer,col_indexer] = value...
    • 警告与转换无关。这是因为在某些时候,您已经制作了数据框的副本,而没有说您希望它是一个全新的数据框,可以这么说。没有你的代码,我无法告诉你在哪里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多