【问题标题】:Read CSV using pandas使用 pandas 读取 CSV
【发布时间】:2021-12-06 17:19:09
【问题描述】:

我正在尝试使用 pandas 从https://download.bls.gov/pub/time.series/bp/bp.measure 读取数据,如下所示:

import pandas as pd

url = 'https://download.bls.gov/pub/time.series/bp/bp.measure'
df = pd.read_csv(url, sep='\t')

但是,我只需要获取包含两列的数据集:measure_code 和 measure_text。由于这个数据集作为标题BP measure,我也尝试像这样阅读它:

url = 'https://download.bls.gov/pub/time.series/bp/bp.measure'
df = pd.read_csv(url, sep='\t', skiprows=1)

但在这种情况下,它会返回一个只有一列的数据集,我无法将其删除:

>>> df.columns
Index([' measure_code         measure_text'], dtype='object')

关于获取此数据集的更好方法的任何建议/想法?

【问题讨论】:

    标签: python-3.x pandas csv


    【解决方案1】:

    这绝对是可能的,但格式有一些怪癖。

    1. 如您所述,列标题从第 2 行开始,因此您需要 skiprows=1。
    2. 文件是空格分隔的,不是制表符分隔的。
    3. 列值跨越多行。

    问题 1 和 2 可以使用 skiprows 和 sep 修复。问题 3 更难,需要您对文件进行一点预处理。出于这个原因,我使用了更灵活的方式来获取文件,使用 requests 库。获得文件后,我使用正则表达式修复问题 3,并将文件返回给 pandas。

    代码如下:

    import requests
    import re
    import io
    import pandas as pd
    
    url = 'https://download.bls.gov/pub/time.series/bp/bp.measure'
    
    # Get the URL, convert the document from DOS to Unix linebreaks
    measure_codes = requests.get(url) \
        .text \
        .replace("\r\n", "\n")
    
    # If there's a linebreak, followed by at least 7 spaces, combine it with
    # previous line
    measure_codes = re.sub("\n {7,}", " ", measure_codes)
    
    # Convert the string to a file-like object
    measure_codes = io.BytesIO(measure_codes.encode('utf-8'))
    
    # Read in file, interpreting 4 spaces or more as a delimiter.
    # Using a regex like this requires using the slower Python engine.
    # Use skiprows=1 to skip the header
    # Use dtype="str" to avoid converting measure code to integer.
    df = pd.read_csv(measure_codes, engine="python", sep=" {4,}", skiprows=1, dtype="str")
    
    print(df)
    

    【讨论】:

      猜你喜欢
      • 2022-11-01
      • 2019-07-16
      • 2021-11-08
      • 2019-03-18
      • 2021-10-31
      • 1970-01-01
      • 2021-06-05
      • 2015-08-30
      • 1970-01-01
      相关资源
      最近更新 更多