pandas geopandas

x·2024년 4월 22일
0

geopandas

목록 보기
2/2
import os
import pandas as pd
import geopandas as gpd

# csv 파일을 읽을 때 셀에 010이 10으로 읽히는 걸 방지하기 위해 dtype=str 지정
pd.read_csv(file_path, dtype=str)

# geometry_x 컬럼명을 geometry로 수정. inplace=True면 원본 df의 컬럼명을 변경. inplace=False면 새 df 반환
df.rename(
    columns={
        "geometry_x": "geometry",
    },
    inplace=False,
)

# txt 파일을 dataframe으로 변경
pd.read_csv(
    file_path,
    sep="|",
    engine="python",
    encoding="cp949",
    names=columns,
    dtype=str,
)

# x,y 좌표를 GeometryArray로 변환함
df["geometry"] = gpd.points_from_xy(
    df[x_key],
    df[y_key],
    crs=from_crs,
)

# spatial 컬럼을 지정하고, 좌표계 설정
gpd.GeoDataFrame(
    df,
    geometry="geometry",
).to_crs({"init": to_crs})

# dataframe의 조건에 따라 drop
df.drop(df.query("id in @to_be_dropped_ids").index)

# 컬럼 리스트로 df 병합
pd.merge(left=df1, right=df2, how="inner", on=["column1", "column2])

# 두 GeoDataFrame의 공간 join, how는 left, right, innner가 될 수 있음.
# df1이 df2를 포함하는 것만 join하고 싶다면 predicate를 contains로. 그 외 within, intersects를 사용할 수 있다
gpd.sjoin(df1, df2, how=how, predicate=predicate)

# geometry 설정 및 좌표계 지정
df = df.set_geometry("geometry")
df.crs = "epsg:4326"

# x,y 좌표를 latitude, longitude로 변환, 좌표계를 5179에서 4326으로 변환
from pyproj import Proj, transform

epsg5179 = Proj(init="epsg:5179")
wgs84 = Proj(init="epsg:4326")

longitude, latitude = transform(
    epsg5179,
    wgs84,
    df[x_key],
    df[y_key],
)

df["latitude"] = latitude
df["longitude"] = longitude

# df 중복 제거
df.drop_duplicates()

# df의 컬럼의 값 가져오기
stations_and_entrances["id"].values

points_from_xy 예시

x,y 좌표

GeometryArray

0개의 댓글