pandas & duckdb

자주 쓰는 Pandas 코드

wefree 2024. 8. 13. 11:08

데이터 통계 보기

df.info()
df.describe()

df.describe(include='object') 
df.value_counts()

 

데이터 필터링

df[['name', 'age']]
df.loc[df['a'] > 10, ['a', 'c']]   # Select rows meeting loglogical condition, and only the specific columns .

df.sample(frac=0.5)
df.sample(n=10)  # Randomly select n rows.

 

 

1개의 Cell  읽어 DataFrame 이 아닌 원래 type 으로 리턴하기

web_doc_meta.loc[web_doc_meta['key'] == 'vTime', 'value'].to_numpy()[0]

 

Column  타입 변경하기

 df["is_deleted"] = df["is_deleted"].astype(str)

 

기존 데이터를 변환해 새로운 Column 으로 추가하기

import pendulum


df["visitTime"] = df["vTime"].apply(
        lambda ts: pendulum.from_timestamp(ts / 1000, tz="Asia/Seoul").format("YYYY-MM-DD HH:mm:ss.SSSZ")
    )

 

duckdb UDF 사용하기 - 참고

import pendulum
import duckdb


duckdb.create_function("convert_vtime", lambda ts: pendulum.from_timestamp(ts / 1000, tz="Asia/Seoul").format("YYYY-MM-DD HH:mm:ss.SSSZ")
df = duckdb.sql("""select *, convert_time(vTime) as visitTime from df""").to_df()

 

Plot

df['cost'].plot(kind='hist', range=[0, 1000], xlabel='cost', ylabel='count', bins=30, grid=True)

 

DataFrame 만들기

import pandas as pd

df = pd.DataFrame(
    data=[
        ("A", 10),
        ("B", 20)
    ],
    columns=["name", "age"]
)

print(df)

#   name  age
# 0    A   10
# 1    B   20

 

df = pd.DataFrame(
    {
        'name': ['A', 'B', 'C'],
        'age': [1, 2, 3],
        'children': [4, 5, 6]
    }
)

print(df)

#   name  age  children
# 0    A    1         4
# 1    B    2         5
# 2    C    3         6

 

 

출력시 Index 숨기기

https://stackoverflow.com/a/57649212/5137193

df.style.hide()

 

CSV 저장시 Index 제외하기 & quoting

  • quoting 옵션이 csv.QUOTE_ALL로 설정되면 모든 값이 쌍따옴표로 감싸집니다.
  • 기본값은 csv.QUOTE_MINIMAL로, 필요한 경우에만 따옴표를 추가합니다.
  • sv.QUOTE_NONE을 사용할 경우, 데이터에 쉼표(,)가 포함되어 있으면 문제가 발생할 수 있습니다.
df.to_csv("output.csv", sep='\t', index=False,  quoting=csv.QUOTE_NONE)