Examples

This page provides practical examples of how to use the Tabular-Enhancement-Tool for various data enrichment scenarios.

REST API Enhancement (POST)

This example demonstrates how to enrich a CSV file by sending its rows as JSON payloads to a REST POST endpoint using httpbin.org.

Input Data (posts_data.csv)

id

title

body

userId

1

Sample Title 1

Sample Body 1

1

2

Sample Title 2

Sample Body 2

1

3

Sample Title 3

Sample Body 3

2

4

Sample Title 4

Sample Body 4

2

5

Sample Title 5

Sample Body 5

3

Code Example (httpbin_post_example.py)

import tabular_enhancement_tool as tet
import os

def main():
    # 1. Path to our sample data
    input_file = "posts_data.csv"

    # 2. HTTPBin API Example (POST)
    # This public API echoes back the data sent in the request.
    api_url = "https://httpbin.org/post"

    # The mapping defines which CSV columns map to the JSON payload fields
    mapping = {"title": "title", "body": "body", "userId": "userId"}

    # 3. Create the enhancer
    enhancer = tet.TabularEnhancer(
        file_path=input_file,
        api_url=api_url,
        mapping=mapping,
        method="POST",
        max_workers=5
    )

    # 4. Read the tabular file
    enhancer.read()

    # 5. Process the data
    # By default, responses are automatically flattened into separate columns.
    enhancer.enhance()

    # 6. Save the results
    enhancer.save(suffix="_enhanced")

if __name__ == "__main__":
    main()

Output Data (posts_data_enhanced.csv)

id

title

body

userId

exception_summary

1

Sample Title 1

Sample Body 1

1

2

Sample Title 2

Sample Body 2

1

3

Sample Title 3

Sample Body 3

2

4

Sample Title 4

Sample Body 4

2

5

Sample Title 5

Sample Body 5

3

REST API Enhancement (POST with Authentication)

This example demonstrates how to use a Bearer Token with a POST request.

Code Example (httpbin_auth_post_example.py)

import tabular_enhancement_tool as tet

def main():
    # 1. Configure the enhancer with a Bearer Token
    # Pass the token in the headers
    token = "your_secret_token_here"
    api_url = "https://httpbin.org/post"
    mapping = {"title": "title", "body": "body", "userId": "userId"}

    enhancer = tet.TabularEnhancer(
        file_path="posts_data.csv",
        api_url=api_url,
        mapping=mapping,
        method="POST",
        headers={"Authorization": f"Bearer {token}"},
        max_workers=5
    )

    # 2. Read, enhance and save
    enhancer.read()
    enhancer.enhance()
    enhancer.save(suffix="_auth")

if __name__ == "__main__":
    main()

REST API Enhancement (GET with URL Templating)

This example shows how to use GET requests with dynamic URL templating to fetch weather data from the National Weather Service (NWS).

Input Data (cities_coords.csv)

city

lat

lon

New York

40.7128

-74.0060

Los Angeles

34.0522

-118.2437

Chicago

41.8781

-87.6298

Houston

29.7604

-95.3698

Phoenix

33.4484

-112.0740

Code Example (nws_weather_example.py)

import tabular_enhancement_tool as tet

def main():
    # 1. Configure the NWS API enhancer
    # The URL template uses {lat} and {lon} placeholders
    api_url = "https://api.weather.gov/points/{lat},{lon}"
    mapping = {"lat": "lat", "lon": "lon"}
    headers = {"User-Agent": "(myweatherapp.com, contact@example.com)"}

    enhancer = tet.TabularEnhancer(
        file_path="cities_coords.csv",
        api_url=api_url,
        mapping=mapping,
        method="GET",
        headers=headers,
        max_workers=5
    )

    # 2. Process the data
    # The NWS API 'data' field is automatically extracted and flattened.
    enhancer.read()
    enhancer.enhance()

    # 3. Save the results
    enhancer.save(suffix="_weather")

if __name__ == "__main__":
    main()

By default, the tool flattens the response into individual columns. You can disable this behavior to keep the raw response in a single column (api_response).

# Disable flattening to keep the raw response dictionary in one column
enhancer = tet.TabularEnhancer(
    api_url=api_url,
    mapping=mapping,
    flatten_response=False
)
df_non_flattened = enhancer.process_dataframe(df)