One common approach is to first apply a circular buffer and then apply an envelope (i.e. smallest rectangular polygon that contains each object).
Here is how you can create square buffers using geopandas GeoSeries.envelope
(source). Note that geometric operations in geopandas are performed by shapely.
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
import matplotlib.pyplot as plt
# Generate some sample data
p1 = Point((1,2))
p2 = Point((5,6))
df = pd.DataFrame({'a': [11,22]}8))
gdfpoints = gpd.GeoDataFrameGeoSeries(df, geometry = [p1,p2])
gdf.plot()
# Buffer the points byusing a square cap style
# Note cap_style: round = 1, flat = 2, unitssquare = 3
buffer = gdfpoints.buffer(2, cap_style = 3)
buffer.plot()
# Apply an envelope aroundPlot circularthe buffersresults
envelopefig, ax1 = plt.subplots()
buffer.envelopeboundary.plot(ax=ax1, color = 'slategrey')
envelopepoints.plot(ax = ax1, color = 'red')