안녕하세요. 언제나 휴일에 언휴예요.
이번 강의는 랜덤한 데이터로 DataFrame을 생성하고 원하는 행과 열 데이터를 선택하는 실습입니다.
이번 실습에서는 먼저 100년 동안 일 간 판매 데이터를 랜덤하게 생성할 거예요.
랜덤하게 생성한 판매 데이터로 DataFrame을 생성합니다.
그리고 년도 별 일 별 데이터를 선택하는 실습을 할 거예요.
랜덤한 데이터 만들기 랜덤 데이터로 데이터 프레임 생성 원하는 행 선택하기 1. loc 멤버를 사용하여 원하는 행 선택 2. 인덱스에 시퀀스로 여러 개의 행 선택하기 3. head 함수로 앞쪽부터 원하는 개수의 행 선택 4. tail 함수로 뒤쪽부터 원하는 개수의 행 선택 원하는 열 선택하기 열 선택 후 행 선택하여 원하는 쉘 선택하기 전체 코드
랜덤한 데이터 만들기
100년 간 데이터를 만들거예요.
일 별 판매 데이터를 만들거예요.
years = range(1919,2020) days = range(1,366) data=[]
랜덤한 값을 만들기 위해 random을 import하세요.
import random
여기에서는 100년 동안 일자 별 랜덤 데이터를 만들거예요.
각 년도 별 판매 차등을 위해 100~199의 랜덤 값을 만들게요.
random.randrange 함수에 범위 n을 입력하면 n개 정수(0~n-1)중에 하나의 값을 랜덤하게 발생합니다.
따라서 random.randrange(100)+100 코드로 00~199의 랜덤 값을 만들 수 있어요.
for y in years: ydata=[] ry = random.randrange(100)+100
일 별 판매량은 0~799개의 판매 개수에 년도 별 차등하게 만든 랜덤 값 ry를 더하기로 할게요.
현재까지 코드를 포함하여 작성한 코드입니다.
years = range(1919,2020) days = range(1,366) data=[] import random for y in years: ydata=[] ry = random.randrange(100)+100 for r in days: ydata.append((random.randrange(800)+ry)) data.append(ydata) print(data[0][0:30]) #첫 번째 해의 30일 판매 데이터 출력
다음은 실행 결과는 랜덤하게 나오겠죠.
[778, 164, 761, 610, 926, 620, 263, 202, 198, 859, 839, 392, 635, 672, 250, 525, 485, 285, 180, 919, 779, 787, 880, 376, 920, 896, 142, 462, 441, 685]
랜덤 데이터로 데이터 프레임 생성
랜덤하게 생성한 데이터로 데이터 프레임을 생성합시다.
년도를 행으로 일을 열로 지정합시다.
import pandas as pd df = pd.DataFrame(data,index=years,columns=days) print(df)
실행 결과는 다음과 같습니다. (수치는 랜덤합니다.)
1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 1919 279 664 181 538 639 719 708 ... 747 582 255 260 890 564 477 1920 439 354 853 601 675 681 857 ... 366 432 275 837 304 278 804 1921 206 537 635 807 831 350 169 ... 448 935 322 326 727 310 907 1922 251 315 642 500 678 252 383 ... 326 144 805 124 378 891 261 1923 850 618 219 764 939 491 708 ... 314 721 671 601 611 221 956 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 2015 215 180 213 854 243 189 549 ... 726 219 137 710 291 742 234 2016 684 184 334 631 753 970 311 ... 707 667 453 830 874 328 771 2017 932 531 523 453 616 189 577 ... 704 725 866 934 884 508 540 2018 733 706 884 515 592 451 378 ... 499 546 240 280 700 550 228 2019 348 369 473 669 310 241 785 ... 661 324 311 432 410 251 951 [101 rows x 365 columns]
원하는 행 선택하기
DataFrame에서 행을 선택하는 방법은 여러가지가 있어요.
1. loc 멤버를 사용하여 원하는 행 선택
DataFrame의 멤버 loc에 대괄호와 행 이름을 입력하면 원하는 행을 선택할 수 있어요.
df.loc[행이름]
다음은 2008년 판매 데이터를 선택한 예제 코드입니다.
print(df.loc[2008]) #2008년 판매 데이터 출력
1 155 2 457 3 870 4 339 5 796 ... 361 860 362 635 363 580 364 549 365 286 Name: 2008, Length: 365, dtype: int64
loc 멤버를 이용하여 얻어온 년 간 판매 데이터는 Series 형식이죠.
다시 인덱스로 특정 일자 판매 데이터로 얻어올 수 있습니다.
print(df.loc[2008][4]) #2008년 4일째 판매 데이터 출력 print(df.loc[2008][0:5]) #2008년 인덱스 0~4까지 판매 데이터 출력
실행 결과는 다음과 같습니다. (데이터는 랜덤한 수치입니다.)
346 1 622 2 297 3 790 4 346 5 571
2. 인덱스에 시퀀스로 여러 개의 행 선택하기
여러 개의 행을 선택할 때 인덱스에 시퀀스로 선택할 수 있어요.
이 때 시퀀스는 인덱스로 0부터 시작하며 end는 빠지는 것을 잊지 않으셨죠.
df[start:end]
다음은 인덱스 1에서 2까지 출력하는 코드입니다.
1919년부터 100년가 데이터이므로 출력하는 것은 1920년(인덱스 1)부터 1921년(인덱스 2) 데이터를 출력하니다.
print(df[1:3])#시퀀스(1~3, 3은 생략), 인덱스 1(1920년)과 인덱스 2(1921년) 출력
3. head 함수로 앞쪽부터 원하는 개수의 행 선택
head 함수에 선택할 행 개수를 전달하면 앞쪽부터 원하는 개수의 행을 선택할 수 있어요.
인자를 전달하지 않으면 디폴트 값은 5입니다.
음수를 전달하면 해당 개수 뺀 나머지를 앞쪽부터 선택합니다. (이 때 선택은 앞쪽부터 빠지는 것은 뒤쪽부터 빠지는 것입니다.
df.head(n=5)
다음은 head 함수를 호출하여 5년간, 3년간, 3년을 뺀 데이터를 출력하는 예제 코드입니다.
print(df.head()) #앞쪽부터 5년간 데이터 출력 print(df.head(3)) #앞쪽부터 3년간 데이터 출력 print(df.head(-3)) #앞쪽부터 3년을 뺀(97년) 데이터 출력
실행 결과는 다음과 같아요. (수치는 랜덤합니다.)
1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 1919 450 335 857 908 783 302 534 ... 601 854 513 845 872 282 662 1920 877 879 680 763 317 724 553 ... 249 217 848 234 491 656 921 1921 931 991 542 532 476 916 751 ... 409 328 764 384 895 639 825 1922 246 737 830 207 687 599 347 ... 733 268 664 593 719 664 496 1923 791 929 706 797 487 761 259 ... 258 830 529 835 802 479 530 [5 rows x 365 columns] 1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 1919 450 335 857 908 783 302 534 ... 601 854 513 845 872 282 662 1920 877 879 680 763 317 724 553 ... 249 217 848 234 491 656 921 1921 931 991 542 532 476 916 751 ... 409 328 764 384 895 639 825 [3 rows x 365 columns] 1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 1919 450 335 857 908 783 302 534 ... 601 854 513 845 872 282 662 1920 877 879 680 763 317 724 553 ... 249 217 848 234 491 656 921 1921 931 991 542 532 476 916 751 ... 409 328 764 384 895 639 825 1922 246 737 830 207 687 599 347 ... 733 268 664 593 719 664 496 1923 791 929 706 797 487 761 259 ... 258 830 529 835 802 479 530 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 2012 148 658 144 669 420 195 353 ... 874 435 145 684 832 286 479 2013 768 513 632 645 287 861 983 ... 928 616 599 961 972 469 520 2014 151 545 516 824 886 113 786 ... 413 180 109 687 607 533 528 2015 667 428 812 578 604 220 361 ... 665 605 300 225 353 696 739 2016 150 588 172 556 390 459 240 ... 720 625 601 233 930 387 196 [98 rows x 365 columns]
4. tail 함수로 뒤쪽부터 원하는 개수의 행 선택
tail 함수에 선택할 행 개수를 전달하면 뒤쪽부터 원하는 개수의 행을 선택할 수 있어요.
인자를 전달하지 않으면 디폴트 값은 5입니다.
음수를 전달하면 해당 개수 뺀 나머지를 뒤쪽부터 선택합니다. (이 때 선택은 뒤쪽부터 빠지는 것은 앞쪽부터 빠지는 것입니다.
df.tail(n=5)
다음은 tail 함수를 호출하여 5년간, 3년간, 3년을 뺀 데이터를 출력하는 예제 코드입니다.
print(df.tail()) #뒤쪽부터 5년간 데이터 출력 print(df.tail(3)) #뒤쪽부터 3년간 데이터 출력 print(df.tail(-3))#뒤쪽부터 3년을 뺀(97년) 데이터 출력
실행 결과는 다음과 같습니다. (수치는 랜덤합니다.)
1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 2015 497 276 604 279 416 774 849 ... 861 847 624 331 809 182 210 2016 535 910 861 743 647 912 843 ... 366 312 721 545 986 503 280 2017 706 802 170 524 767 514 272 ... 138 578 642 835 625 837 177 2018 148 309 587 173 735 317 449 ... 457 560 921 572 542 199 207 2019 269 737 498 826 343 246 583 ... 286 367 611 951 213 947 289 [5 rows x 365 columns] 1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 2017 706 802 170 524 767 514 272 ... 138 578 642 835 625 837 177 2018 148 309 587 173 735 317 449 ... 457 560 921 572 542 199 207 2019 269 737 498 826 343 246 583 ... 286 367 611 951 213 947 289 [3 rows x 365 columns] 1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 1922 708 201 419 775 594 310 459 ... 877 900 686 340 395 160 261 1923 325 366 764 406 716 351 494 ... 358 316 515 421 938 534 894 1924 792 581 146 534 613 291 144 ... 477 801 143 396 310 617 504 1925 264 722 389 293 551 216 205 ... 440 410 835 695 557 669 580 1926 659 784 507 651 749 478 733 ... 124 121 243 196 710 390 114 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 2015 497 276 604 279 416 774 849 ... 861 847 624 331 809 182 210 2016 535 910 861 743 647 912 843 ... 366 312 721 545 986 503 280 2017 706 802 170 524 767 514 272 ... 138 578 642 835 625 837 177 2018 148 309 587 173 735 317 449 ... 457 560 921 572 542 199 207 2019 269 737 498 826 343 246 583 ... 286 367 611 951 213 947 289 [98 rows x 365 columns]
원하는 열 선택하기
DataFrame에 인덱스 연산에 열 이름을 입력하는 원하는 열을 선택할 수 있어요.
df[열이름]
다음은 열 선택을 통해 1일차와 363일차의 판매 데이터를 출력하는 예제 코드입니다.
print(df) print(df[1]) #각 년도의 1일차 판매 데이터 출력 print(df[363]) #각 년도의 363일차 판매 데이터 출력
다음은 실행 결과입니다. (수치는 랜덤합니다.)
1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 1919 377 894 575 897 893 769 664 ... 232 480 898 240 219 884 580 1920 306 251 797 850 176 624 385 ... 826 835 333 788 505 862 838 1921 328 953 295 330 347 349 908 ... 550 399 864 798 333 751 828 1922 838 423 652 388 436 612 609 ... 362 729 763 240 284 173 177 1923 202 336 378 521 874 674 513 ... 290 384 374 387 639 339 464 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 2015 458 895 310 390 704 625 656 ... 313 895 588 375 667 593 778 2016 709 813 662 608 904 156 142 ... 635 163 597 903 254 243 352 2017 530 200 498 639 356 356 599 ... 205 771 931 730 281 218 446 2018 315 570 668 914 402 217 444 ... 239 806 433 221 620 659 881 2019 913 583 316 824 308 818 892 ... 594 925 440 179 296 208 497 [101 rows x 365 columns] 1919 377 1920 306 1921 328 1922 838 1923 202 ... 2015 458 2016 709 2017 530 2018 315 2019 913 Name: 1, Length: 101, dtype: int64 1919 219 1920 505 1921 333 1922 284 1923 639 ... 2015 667 2016 254 2017 281 2018 620 2019 296 Name: 363, Length: 101, dtype: int64 Process finished with exit code 0
열 선택 후 행 선택하여 원하는 쉘 선택하기
여기에서의 결과도 Series 형식이죠.
다시 인덱스 연산으로 년도나 시퀀스를 전달하면 원하는 쉘(일, 년도)을 선택할 수 있어요.
다음은 2일차를 선택한 후에 2018년(결국 2018년 2일차)와 시퀀스 [0:5]를 선택하여 출력하는 예제 코드입니다.
print(df) print(df[2][2018]) print(df[2][0:5])
실행 결과는 다음과 같습니다.
1 2 3 4 5 6 7 ... 359 360 361 362 363 364 365 1919 387 329 458 669 715 870 205 ... 392 238 514 186 544 765 200 1920 639 871 336 424 559 717 206 ... 948 294 759 692 410 773 369 1921 328 466 288 292 344 553 923 ... 656 701 459 969 384 713 460 1922 471 421 924 916 168 474 880 ... 426 798 475 376 564 546 244 1923 598 527 275 272 201 324 624 ... 475 926 831 616 266 781 902 ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 2015 715 692 569 262 120 415 188 ... 355 623 138 859 535 430 170 2016 154 212 728 386 605 342 467 ... 137 778 410 314 304 384 539 2017 635 622 599 687 480 939 242 ... 185 602 727 241 755 538 676 2018 476 554 536 565 562 148 227 ... 661 744 516 538 419 633 764 2019 442 662 630 898 139 566 319 ... 827 133 472 141 513 227 345 [101 rows x 365 columns] 554 1919 329 1920 871 1921 466 1922 421 1923 527 Name: 2, dtype: int64
전체 코드
#랜덤으로 100년간 일 별 판매 개수 생성 #데이터 프레임 생성(행:year, 열:day) #년도별 데이터 확인하기 : 원하는 행 #일 별 데이터 확인하기 : 원하는 열 #년도와 일 별 데이터 확인하기 :원하는 행, 열 years = range(1919,2020) days = range(1,366) data=[] import random for y in years: ydata=[] ry = random.randrange(100)+100 for r in days: ydata.append((random.randrange(800)+ry)) data.append(ydata) #print(data[0][0:30]) #첫 번째 해의 30일 판매 데이터 출력 import pandas as pd df = pd.DataFrame(data,index=years,columns=days) #print(df.loc[2008]) #2008년 판매 데이터 출력 #print(df.loc[2008][4]) #2008년 4일째 판매 데이터 출력 #print(df.loc[2008][0:5]) #2008년 인덱스 0~4까지 판매 데이터 출력 #print(df[1:3])#시퀀스(1~3, 3은 생략), 인덱스 1(1920년)과 인덱스 2(1921년) 출력 #print(df.head()) #앞쪽부터 5년간 데이터 출력 #print(df.head(3)) #앞쪽부터 3년간 데이터 출력 #print(df.head(-3)) #앞쪽부터 3년을 뺀(97년) 데이터 출력 #print(df.tail()) #뒤쪽부터 5년간 데이터 출력 #print(df.tail(3)) #뒤쪽부터 3년간 데이터 출력 #print(df.tail(-3))#뒤쪽부터 3년을 뺀(97년) 데이터 출력 #print(df) #print(df[1]) #각 년도의 1일차 판매 데이터 출력 #print(df[363]) #각 년도의 363일차 판매 데이터 출력 print(df[2][2018]) print(df[2][0:5])