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
x,y 좌표
GeometryArray