판다와 함께하는 파이썬 타입 힌트?
데이터 프레임을 반환하는 문자열을 사용하는 간단한 함수를 예를 들어,
import pandas as pd
def csv_to_df(path):
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
이 함수에 유형 힌트를 추가할 때 권장되는 비단어적 방법은 무엇입니까?
python에게 DataFrame 유형을 요청하면 반환됩니다.pandas.core.frame.DataFrame하지만 다음은 판다가 정의되어 있지 않다는 것을 말해주기 때문에 효과가 없을 것입니다.
def csv_to_df(path: str) -> pandas.core.frame.DataFrame:
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
그냥 사용하는 게 어때요?pd.DataFrame?
import pandas as pd
def csv_to_df(path: str) -> pd.DataFrame:
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
결과는 동일합니다.
> help(csv_to_df)
Help on function csv_to_df in module __main__:
csv_to_df(path:str) -> pandas.core.frame.DataFrame
현재 다음 작업을 수행하고 있습니다.
from typing import TypeVar
PandasDataFrame = TypeVar('pandas.core.frame.DataFrame')
def csv_to_df(path: str) -> PandasDataFrame:
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
이는 다음을 제공합니다.
> help(csv_to_df)
Help on function csv_to_df in module __main__:
csv_to_df(path:str) -> ~pandas.core.frame.DataFrame
그것이 얼마나 단순한 것인지는 모르지만, 유형 힌트로서 충분히 이해할 수 있습니다.
이제 이것을 도울 수 있는 pip 패키지가 있습니다.https://github.com/CedricFR/dataenforce
설치할 수 있습니다.pip install dataenforce그리고 다음과 같은 매우 비단조적인 유형의 힌트를 사용합니다.
def preprocess(dataset: Dataset["id", "name", "location"]) -> Dataset["location", "count"]:
pass
패키지 사용에 대해 설명하는 답변을 확인하십시오.data-science-types.
pip install data-science-types
데모
# program.py
import pandas as pd
df: pd.DataFrame = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]}) # OK
df1: pd.DataFrame = pd.Series([1,2,3]) # error: Incompatible types in assignment
mypy를 동일한 방법으로 실행:
$ mypy program.py
팬더를 보세요.
pandera는 데이터 프레임과 유사한 객체에 대해 데이터 유효성 검사를 수행하여 데이터 처리 파이프라인을 보다 읽기 쉽고 강력하게 만들 수 있는 유연하고 표현력이 뛰어난 API를 제공합니다.데이터 프레임에는 팬데라가 런타임에 명시적으로 검증하는 정보가 포함되어 있습니다.이는 생산에 중요하거나 재현 가능한 연구 환경에서 유용합니다.
판데라의 장점은 개별 데이터 프레임 열의 유형도 지정할 수 있다는 것입니다.다음 예제에서는 판데라를 사용하여 정수 열이 하나 포함된 데이터 프레임을 런타임에 적용합니다.
import pandas as pd
import pandera
from pandera.typing import DataFrame, Series
class Integers(pandera.SchemaModel):
number: Series[int]
@pandera.check_types
def my_fn(a: DataFrame[Integers]) -> None:
pass
# This works
df = pd.DataFrame({"number": [ 2002, 2003]})
my_fn(df)
# Raises an exception
df = pd.DataFrame({"number": [ 2002.0, 2003]})
my_fn(df)
# Raises an exception
df = pd.DataFrame({"number": [ '2002', 2003]})
my_fn(df)
이것은 원래 질문에서 벗어나지만 @dangom의 답변을 사용하여 구축하는 것입니다.TypeVar그리고 @Georgy는 유형 힌트에서 DataFrame 열에 대한 데이터 유형을 지정할 수 없다고 말합니다. 다음과 같은 간단한 해결 방법을 사용하여 DataFrame에서 데이터 유형을 지정할 수 있습니다.
from typing import TypeVar
DataFrameStr = TypeVar("pandas.core.frame.DataFrame(str)")
def csv_to_df(path: str) -> DataFrameStr:
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
언급URL : https://stackoverflow.com/questions/43890844/pythonic-type-hints-with-pandas
'source' 카테고리의 다른 글
| 당신은 레일즈에서 DB 사용자 이름, pw, 데이터베이스 이름을 얻을 수 있습니까? (0) | 2023.07.19 |
|---|---|
| 구체화된 보기 - 마지막 새로 고침 확인 (0) | 2023.07.19 |
| 열 값을 기준으로 한 테이블에서 다른 테이블로 데이터를 가져오는 방법 (0) | 2023.07.19 |
| 그림에서 표시된 각 선에 대해 새 색상을 선택하는 방법 (0) | 2023.07.19 |
| 배열 길이별 Mongo 순서 (0) | 2023.05.20 |