이번 포스팅에서는 구조화된 데이터의 처리를 지원하는 라이브러리인 pandas에 대한 내용과 다루는 방법에 대하여 정리를 해 보았습니다.
#sep : 정규식 표현을 통한 데이터 분리
#header : column미지정
df_data = pd.read_csv(
"csv자원 경로", sep="\s+", header=None
)
# 컬럼의 이름 지정
df_data.columns = ["col1", "col2", "col3"]
#데이터들을 가져올 수 있음(타입은 ndarray형식)
df_data.values
#선언방식
example_obj = Series()
list_data = [1, 2, 3, 4, 5]
example = Series(data=list_data) #데이터와 인덱싱이 숫자 혹은 문자로 지정이 가능
list_data = [1, 2, 3, 4, 5]
list_name = ["one", "two", "three", "four", "five"]
example = Series(data=list_data, index=list_name,name="example_data")
dict_data = {"one": 1, "two": 2, "three": 3, "four": 4, "five": 5}
example = Series(dict_data, dtype=np.float32, name="example_data")
# 값 할당 및 타입 지정 가능
example["one"] = 11
example = example_obj.astype(float)
example["one"] = 3.2
example = example_obj.astype(int)
example["one"] = 3.2
#값, 인덱스 정보 가져오기
example.values
example.index
#이름과 column이름 지정 가능
example.name = "number" #이름 지정
example.index.name = "col_name" #컬럼 이름 지정
dict_data_1 = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}
#시리즈 데이터는 인덱스가 기준!
indexes = ["a", "b", "c", "d", "e", "f", "g", "h"] # 지정 인덱스 수가 많으면 NaN으로 채워줌
series = Series(dict_data_1, index=indexes)
from pandas import DataFrame
raw_data = {
"first_name": ["kim", "lee", "park"],
"last_name": ["t1", "t2", "t3"],
"age": [20, 30, 40],
"city": ["city1", "city2", "city3"],
}
df = DataFrame(raw_data, columns=["first_name", "last_name", "age", "city"])
DataFrame(raw_data, columns=["age", "city"])
#칼럼 기준으로 가져올 때 없으면 NaN값을 채워 가져옴
DataFrame(raw_data, columns=["first_name", "last_name", "age", "city", "debt"])
print(df.first_name)
print(type(df.first_name))
s = pd.Series(np.nan, index=[9,8,7,6,5,4,3,2,1])
s.loc[:3]
s.iloc[:3]
df.age > 3
values = Series(data=["a", "b"], index=[0, 1])
df["append"] = values #values에 없는 인덱스에 데이터에는 NaN이 들어가
df.head(3).T
raw_data = {
"first_name": ["kim", "lee", "park"],
"last_name": ["t1", "t2", "t3"],
"age": [20, 30, 40],
"city": ["city1", "city2", "city3"],
}
df[["first_name","last_name"]].head(3)
# 값으로 넣으면 시리즈, 벡터로 넣으면 데이터 프레임으로 나옴
df["first_name"].head(3)
df[["first_name"]].head(3)
df[:2]
df.iloc[2]
df['first_name'][:2]
age_series = df['age']
age_series[[0,1]]
# Series에 boolean index를 통해서 데이터를 뽑아 올 수 있음
age_series[age_series < 25]
# fancy index 이용
age_serires[list(range(0, 2))]
df.loc[[0,2], ["age"]]
df.iloc[:2, :3]
df.index = list(range(3,0,-1))
df.reset_index()
#drop파라미터 사용시 기존 인덱스 삭제
df.reset_index(drop = True)
#df자체 변화
df.reset_index(drop = True,inplace =True)
s1 = Series(range(1,6), index = list("abcde"))
s2 = Series(range(5,10), index = list("ABCde"))
#같은 인덱스를 기준으로 연산이 수행되고
#fill_value파라미터를 이용하면
#인덱스 값이 존재하지 않는 DataFrame에 대하여 값을 채우고
#수행이 됨
s1.add(s2)
s1.add(s2, fill_value = 0)
s1 + s2
df1 = DataFrame(np.arange(9).reshape(3, 3), columns=list("abc"))
df2 = DataFrame(np.arange(16).reshape(4, 4), columns=list("abcd"))
df1 + df2
df1.add(df2, fill_value = 0)
df1.mul(df2, fill_value = 0)
# series 와 dataframe의 연산
df = DataFrame(np.arange(16).reshape(4, 4), columns=list("abcd"))
s = Series(np.arange(1, 5), index=list("abcd"))
df + s
df.add(s, axis = 1)
#인덱스가 일치하지 않아 NaN으로 채워져 리턴
df.add(s, axis = 0)
s = Series(np.arange(1, 5), index= range(4))
df.add(s, axis = 0)
s1 = Series(np.arange(10))
# s1메모리 자체의 값이 변하지는 않음
s1.map(lambda x : x**2).head(5) #lambda이용
def func(x):
return x + 1
s1.map(func).head(5) #function 이용
#dictionary이용
z = {1: 'A', 2: 'B', 3: 'C'}
s1.map(z).head(5) # dict 타입으로 데이터 교체, 없는 값은 NaN
#Series이용
s2 = Series(np.arange(10,20))
s1.map(s2).head(6)
raw_data = {
"first_name": ["kim", "lee", "park"],
"last_name": ["t1", "t2", "t3"],
"age": [20, 30, 40],
"city": ["city1", "city2", "city2"],
}
df = pd.DataFrame(raw_data, columns=["first_name", "last_name", "age", "city"])
df.city.map({"city1" : 'a', "city2": 2})
- column값들 중에서 유일한 값만 가져옴
raw_data = {
"first_name": ["kim", "lee", "park"],
"last_name": ["t1", "t2", "t3"],
"age": [20, 30, 40],
"city": ["city1", "city2", "city2"],
}
df = pd.DataFrame(raw_data, columns=["first_name", "last_name", "age", "city"])
df.city.unique()
df.city.replace({"city1" : 'a', "city2": 2}).head()
df.city.replace(["city1", "city2"], [0,1], inplace= True)
raw_data = {
"one": [1, 2, 3],
"two": [10, 20,30],
"three": [100, 200, 300]
}
df = pd.DataFrame(raw_data, columns=["one", "two", "three"])
f = lambda x: x.max() - x.min()
df.apply(f)
f = lambda x: np.mean(x)
df.apply(f)
df.apply(np.mean)
df.apply(sum)
def f(x):
return Series(
[x.min(), x.max(), x.mean(), sum(x.isnull())],
index=["min", "max", "mean", "null"],
)
df.apply(f)
f = lambda x : -x
df.applymap(f).head(5)
f = lambda x : -x
df['one'].apply(f).head(5)
df.describe()
df.isnull()
df.sum()
df.sum(axis = 0) # 행을 기준으로
df.sum(axis = 1) # 열을 기준으로
df.sort_values(['one','two'],ascending = False).head(10)
df.one.corr(df.two) # 두 값의 상관관계
df.one.cov(df.two) # 공분산
df.corrwith(df.two) #two와 나머지의 전체값의 상관관계
df.corr() # 모든 상관관계를 보여줌
#row가 잘리는 현상 방지
pd.options.display.max_rows = 2000
Naver BoostCamp AI Tech - edwith 강의
https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=220934409189&proxyReferer=https:%2F%2Fwww.google.com%2F