작성
·
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
안녕하세요! 좋은 실험을 하셨네요.
솔직히 말씀드리면, 일반적으로 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을 많이 쓰기 때문에(일반적으로 보통 그렇습니다), 이 부분 감안하셔서 너무 크게 연연하여 뒷부분 내용을 진행하는데 방해가 되지 않으셨으면 좋겠습니다 : ) (하지만 이런 코드적 내용을 가정하고 검증해보는 것은 정말 좋은 실험입니다! 앞으로도 이런 태도는 향후 큰 도움이 되실거에요!)
감사합니다.