(Python)如何修复数据框列值中的数字表示错误

时间:2019-03-23 14:11:00

标签: python python-3.x pandas dataframe number-formatting

一个(有点)快速的问题-如果我的数据框的列由数字1.305.000, 4.65, 99.9, 443.111.34000组成,如何将它们转换为“正确”格式:1305.000, 4.65, 99.9, 443111.34000? / p>

如果有帮助,则这些值是从.csv文件的某个列中获取的,例如“总净收入”:

以代码块形式:

Day Service Total Net Revenue
0   1   te  1.305.000
1   1   as  4.65
2   2   qw  99.9
3   3   al  443.111.34000
4   6   al  443.111.34000
5   6   te  1.305.000
6   7   pp  200
7   7   te  1.305.000
8   7   al  443.111.34000
9   7   te  1.305.000

另一种基于反馈的表格:

[{'Day': 1, 'Service': 'te', 'Total Net Revenue': '1.305.000'},
 {'Day': 1, 'Service': 'as', 'Total Net Revenue': '4.65'},
 {'Day': 2, 'Service': 'qw', 'Total Net Revenue': '99.9'},
 {'Day': 3, 'Service': 'al', 'Total Net Revenue': '443.111.34000'},
 {'Day': 6, 'Service': 'al', 'Total Net Revenue': '443.111.34000'},
 {'Day': 6, 'Service': 'te', 'Total Net Revenue': '1.305.000'},
 {'Day': 7, 'Service': 'pp', 'Total Net Revenue': '200'},
 {'Day': 7, 'Service': 'te', 'Total Net Revenue': '1.305.000'},
 {'Day': 7, 'Service': 'al', 'Total Net Revenue': '443.111.34000'},
 {'Day': 7, 'Service': 'te', 'Total Net Revenue': '1.305.000'}]

我似乎找不到任何参考,一些见识将得到深深的赞赏。谢谢!

2 个答案:

答案 0 :(得分:1)

我将定义一个函数来解析数字,然后在数据框的列上使用rset = rruleset() rset.rrule(rrule(SECONDLY, dtstart=start_date, interval=duration, until=end_date)) 。例如

apply

答案 1 :(得分:1)

这不是一个大熊猫问题,实际上是在询问如何将看起来奇怪的字符串转换为数字(标记:数字格式)。

以下功能会将这些字符串转换为所需的数字:

import unittest


def cleanup(s: str) -> float:
    parts = s.split('.')
    if len(parts) > 1:
        s = ''.join(parts[:-1]) + '.' + parts[-1]
    return float(s)


class TestCleanup(unittest.TestCase):

    def test_cleanup(self):
        self.assertEqual(200, cleanup('200'))
        self.assertEqual(4.65, cleanup('4.65'))
        self.assertEqual(1305, cleanup('1.305.000'))
        self.assertEqual(443111.34, cleanup('443.111.34000'))

如果这些是货币数字,则可以考虑使用Decimal,这会激发“比例整数”方法。

cleanup()函数.apply()应用于现有数据框很简单:

df['numeric_revenue'] = df['total_net_revenue'].apply(cleanup)