Source code for pudl.transform.ferccid

"""Clean the FERC Company Identifier table."""

import pandas as pd
from dagster import asset

from pudl.helpers import convert_cols_dtypes


[docs] def clean_cid_string_cols(col: pd.Series) -> pd.Series: """Clean string columns: remove unicode, strip whitespace, enforce single spaces, standardize NAs.""" col = ( col.str.replace(r"[\x00-\x1f\x7f-\x9f]", "", regex=True) .str.strip() .str.replace(r"\s+", " ", regex=True) .replace(to_replace=r"^(?i:\s*|na|nan|none)$", value=pd.NA, regex=True) ) return col
@asset(io_manager_key="pudl_io_manager")
[docs] def core_ferc__entity_companies( raw_ferc__entity_companies: pd.DataFrame, ) -> pd.DataFrame: """Clean the FERC Company Identifier table.""" cid_df = raw_ferc__entity_companies cid_df.columns = cid_df.columns.str.lower() # override with field descriptions from data dictionary cid_df = cid_df.rename( columns={ "cid": "company_id_ferc", "organization_name": "company_name", "address": "street_address", "address2": "address_2", "zip": "zip_code", } ) # split out 4 digit zip code suffix from zip code reg = r"(\d{5})(?:-(\d{4}))*" cid_df[["zip_code", "zip_code_4"]] = cid_df["zip_code"].str.extract(reg) # remove unicode, strip whitespace, enforce single spaces, standardize NA values for col in ["company_name", "street_address", "address_2"]: cid_df[col] = clean_cid_string_cols(cid_df[col]) cid_df = convert_cols_dtypes(cid_df) # Make CID the primary key by dropping # the CID values we know have duplicates that should be removed. known_dupe = cid_df.loc[ (cid_df["company_id_ferc"] == "C003521") & (cid_df["company_name"] == "Chestnut Flats Wind Lessee, LLC") ] cid_df = cid_df.drop(known_dupe.index) return cid_df