【问题标题】:How do I parse numbers with thousands separator in pandas read_csv?如何在 pandas read_csv 中使用千位分隔符解析数字?
【发布时间】:2022-01-03 16:23:28
【问题描述】:

我有一个 CSV 文件,其行如下:

"2021 年 12 月 30 日","1,234.11","1,654.22","11,876.23","1,676,234"

我从以前的post 中学到了可以使用的东西:

parse_dates=['Date']

获取解析的日期(有效)。 但是,我希望第 2-4 列为 np.float64,第 5 列为 int64。我怎样才能做到这一点?

我试过这个:

data = pd.read_csv("file.csv",  parse_dates=['Date'], dtype=[np.datetime64, np.float64, np.float64, np.float64, np.float64, np.int64])

但我明白了

TypeError: data type not understood

【问题讨论】:

标签: pandas numpy


【解决方案1】:

使用thousands 参数。

df = pd.read_csv("file.csv",  parse_dates=['Date'], thousands=',')

【讨论】:

    【解决方案2】:

    如果您有特殊格式,请使用converters 参数。

    converters = {
        'Date': lambda x: datetime.strptime(x, "%b %d, %Y"),
        'Number': lambda x: float(x.replace(',', ''))
    }
    df = pd.read_csv('data.csv', converters=converters)
    

    输出:

    >>> df
            Date   Number
    0 2021-12-30  2345.55
    
    >>> df.dtypes
    Date      datetime64[ns]
    Number           float64
    dtype: object
    
    # data.csv
    Date,Number
    "Dec 30, 2021","2,345.55"
    

    其他使用标准参数:

    df = pd.read_csv("data.csv",  header=None, parse_dates=[0], thousands=',', quoting=1)
    

    输出:

    >>> df
               0        1        2         3        4
    0 2021-12-30  1234.11  1654.22  11876.23  1676234
    
    >>> df.dtypes
    0    datetime64[ns]
    1           float64
    2           float64
    3           float64
    4             int64
    dtype: object
    

    【讨论】:

    • 谢谢,这个很全面。我选择了thousands= 答案,因为它在熊猫中似乎更惯用/简单。
    猜你喜欢
    • 2017-07-06
    • 2017-06-25
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 2015-09-20
    • 2014-11-27
    相关资源
    最近更新 更多