인프런 커뮤니티 질문&답변

오레이달리님의 프로필 이미지
오레이달리

작성한 질문수

파이썬(Python)으로 데이터 기반 주식 퀀트 투자하기 Part1

2.3 DataFrame 데이터 타입

강의 2.3 에서 갑자기 생긴 궁금한 점(답변 항상 감사합니다)

작성

·

153

0

s1 = pd.Series(np.arange(1, 6, 1))
s2 = pd.Series(np.arange(
6, 11, 1))
s3 = np.arange(
1, 6, 1)
s4 = np.arange(
6, 11, 1)
pd.DataFrame([s1
, s2], columns=['x', 'xx', 'xxx', 'xxxx', 'xxxxx'], index=["a", "b"])
pd.DataFrame([s3
, s4], columns=['x', 'xx', 'xxx', 'xxxx', 'xxxxx'], index=["a", 'b'])
pd.DataFrame({
"a": s1, "b": s2}, index=['x', 'xx', 'xxx', 'xxxx', 'xxxxx'])
pd.DataFrame({
"a": s3, "b": s4}, index=['x', 'xx', 'xxx', 'xxxx', 'xxxxx'])

강의 2.3. 듣다가 제가 궁금해서그냥 위와 같이 해 봤는데요.
이렇게 실행해 보니까 시리즈로 변환된 s1, s2를 병합할 때는
칼럼명을 지정해서 병합이 안되네요
애초에 시리즈 만들 때부터 각각 칼럼명을 입력해야만 하나요?
왜 그런가요?

s1 = pd.Series(np.arange(1, 6, 1)) s2 = pd.Series(np.arange(6, 11, 1)) s3 = np.arange(1, 6, 1) s4 = np.arange(6, 11, 1) pd.DataFrame([s1, s2], columns=['x', 'xx', 'xxx', 'xxxx', 'xxxxx'], index=["a", "b"]) Out[75]: x xx xxx xxxx xxxxx a NaN NaN NaN NaN NaN b NaN NaN NaN NaN NaN pd.DataFrame([s3, s4], columns=['x', 'xx', 'xxx', 'xxxx', 'xxxxx'], index=["a", 'b']) Out[76]: x xx xxx xxxx xxxxx a 1 2 3 4 5 b 6 7 8 9 10 pd.DataFrame({"a": s1, "b": s2}, index=['x', 'xx', 'xxx', 'xxxx', 'xxxxx']) Out[77]: a b x NaN NaN xx NaN NaN xxx NaN NaN xxxx NaN NaN xxxxx NaN NaN pd.DataFrame({"a": s3, "b": s4}, index=['x', 'xx', 'xxx', 'xxxx', 'xxxxx']) Out[78]: a b x 1 6 xx 2 7 xxx 3 8 xxxx 4 9 xxxxx 5 10

 

 

답변 1

0

DeepingSauce님의 프로필 이미지
DeepingSauce
지식공유자

안녕하세요! 좋은 실험을 하셨네요.

솔직히 말씀드리면, 일반적으로 Series type에 대한 값들을(여기서 s1, s2) 합칠 때는 pd.DataFrame보다는 뒤에서 배울 pd.concat()으로 진행하는 것이 더 일반적인 관례입니다. 저도 물론 그렇구요.

그리고 제 관점에서 위의 차이에 대해서 분석을 해보면,

s1, s2는 Series이기 때문에, pd.DataFrame 입장에서는 '열' 방향 벡터로 생각을 기본적으로 생각을 할 것 같고, np.arrange의 결과인 np.array에 대해서는 '행' 방향 벡터로 인식을 해서 DataFrame을 만들기 때문에, 위와 같은 결과를 만들어내지않을까 라고 조심스레 추측해봅니다.

예를 들어

pd.DataFrame(     

    columns=['x', 'xx', 'xxx', 'xxxx', 'xxxxx'], index=["a", "b"]

)

처럼 '데이터의 값' 없이도 똑같은 모습의 DataFrame이 만들어지는데, [s1, s2]의 형태는 지정한 columns, index 형태와 align이 안맞아서 그냥 쓰레기값인 NaN으로 메꾸는게 아닐까 싶네요.

저도 추측성이라 실제 pandas 코드를 다 까보고 들여다봐야 제대로 판단이 가능할 것 같긴합니다 ( pandas github에 가셔서 코드를 직접 까보시는 것도 공부하는데 큰 도움이 되기도 한답니다^^)

한가지 말씀드리면 수없이 Series, DataFrame를 쓰는 입장에서, pd.DataFrame()을 이용해서 다수의 Series를 합치는 경우는 거의 없고, 보통 concat을 많이 쓰기 때문에(일반적으로 보통 그렇습니다), 이 부분 감안하셔서 너무 크게 연연하여 뒷부분 내용을 진행하는데 방해가 되지 않으셨으면 좋겠습니다 : ) (하지만 이런 코드적 내용을 가정하고 검증해보는 것은 정말 좋은 실험입니다! 앞으로도 이런 태도는 향후 큰 도움이 되실거에요!)

감사합니다.

 

오레이달리님의 프로필 이미지
오레이달리

작성한 질문수

질문하기