Git에서 "detected dubious ownership" 오류는, 현재 사용자가 소유하지 않은 디렉토리에서 작업을 시도할 때 발생

 

 Git에 해당 디렉토리를 안전한 디렉토리로 추가 아래 명령어를 실행하여 C:/project_ESG/workspace 디렉토리를 안전한 디렉토리로 등록

 

git config --global --add safe.directory 파일위치

 

 

 

  • 소유권 문제는 보통 Git이 실행 중인 사용자가 파일 시스템의 특정 디렉토리에 대한 소유권이 없을 때 발생합니다. 이 명령을 사용하면 Git이 해당 디렉토리를 안전한 디렉토리로 간주하고 작업을 허용하게 됩니다.
  • 위 명령어는 전역 설정을 변경하기 때문에, 이후 동일한 문제가 발생하지 않을 것입니다.

 

정확성 (Accuracy): 데이터가 정확해야 함

 

1. beer.csv

 

%matplotlib inline
import pandas as pd

df = pd.read_csv('data/beer.csv', index_col=0)
df.head()
df.plot(kind='box', y='abv')

 

박스플롯을 생성해본 결과

이상점이 3개가 보인다.

 

 

'abv'의 Q1(25%) Q3(75%)지점을 구해본다.

 

describe() 

- 수치형 변수들의 통계량을 보여준다.

df['abv'].describe()
count    2190.000000
mean        0.060186
std         0.117010
min         0.032000
25%         0.050000
50%         0.055000
75%         0.065000
max         5.500000
Name: abv, dtype: float64

 

 

# Q1 = 25%
df['abv'].quantile(0.25)
0.05

 

# Q3 = 75%
df['abv'].quantile(0.75)
0.065
q1 = df['abv'].quantile(0.25)
q3 = df['abv'].quantile(0.75)
iqr = q3 - q1

 

 

25% 지점보다 밑에 있거나,

75% 지점보다 위에 있다면

이상점이다.

condition = (df['abv'] < q1 - 1.5 * iqr) | (df['abv'] > q3 + 1.5 * iqr)
df[condition]

 

위의 박스플롯에서 보였던 이상점 3개가 출력되었다.

2250인덱스의 abv값은 입력실수 이므로 데이터를 수정해준다.

 

이상값 데이터 수정

df.loc[2250,'abv'] = 0.055
df.loc[2250]
abv                             0.055
ibu                              40.0
id                                145
name              Silverback Pale Ale
style         American Pale Ale (APA)
brewery_id                        424
ounces                           12.0
Name: 2250, dtype: object

 

 

이상점을 다시 출력해보면

condition = (df['abv'] < q1 - 1.5 * iqr) | (df['abv'] > q3 + 1.5 * iqr)
df[condition]

 

2개로 줄었음을 알 수있다.

남은 2개의 이상점은 맥주가 아닌 것들이 잘못입력된것으로 보인다.

따라서 삭제하도록 한다.

 

 

이상점의 인덱스를 출력

df[condition].index
Index([963, 1856], dtype='int64')

 

 

이상점 삭제

df.drop(df[condition].index, inplace=True)
df

 

 

이상점을 다시 확인해본다.

condition = (df['abv'] < q1 - 1.5 * iqr) | (df['abv'] > q3 + 1.5 * iqr)
df[condition]

 

이상점이 출력되지 않는다.

 

박스플롯 생성

df.plot(kind='box', y='abv')




2. exam_outlier.csv

df = pd.read_csv('data/exam_outlier.csv')
df

 

 

산점도 출력

df.plot(kind='scatter', x='reading score', y='writing score')

 

 

학생들의 읽기 점수와 쓰기 점수가 어떤 연관성이 있는지 확인해보았다.

700에 있는 이상점이 하나있다.

 

 

상관계수 출력

df.corr(numeric_only=True)

 

이상점 찾기

df['writing score'] > 100
0      False
1      False
2      False
3      False
4      False
       ...  
995    False
996    False
997    False
998    False
999    False
Name: writing score, Length: 1000, dtype: bool

 

쓰기 점수를 인덱싱해본다.

df[df['writing score'] > 100]

 

51번째 인덱스가 이상점이다.

 

이상점 제거

df.drop(51, inplace=True)
df.plot(kind='scatter', x='reading score', y='writing score')

 

상관계수 출력

 

읽기와 쓰기의 상관계수가

0.58 -> 0.94로 올라갔다.

하지만 그래프를 보면 하나의 점이 동 떨어져 있는 것을 알 수있다.

 

# 쓰기는 90이 넘고 앍가눈 40이 안넘는 학생
condition = (df['writing score'] > 90) & (df['reading score'] < 40)
df[condition]

 

이상점 제거

df.drop(373, inplace=True)
df

 

df.plot(kind='scatter', x='reading score', y='writing score')

 

그래프는 오른쪽위로 일직선에 가까움을 볼 수있다.

따라서 양의 상관관계이다.

 

상관관계를 출력해보면

df.corr(numeric_only=True)

 

읽기와 쓰기는 0.95로 1에 매우 가까워 강한 양의 상관관계를 알 수있다.

 

'데이터 분석 > Data_cleansing' 카테고리의 다른 글

데이터 클리닝(유일성)  (0) 2024.06.04
데이터 클리닝(완결성)  (0) 2024.06.04
데이터 정제  (0) 2024.06.04

유일성 (Uniqueness): 동일한 데이터가 불필요하게 중복되어 있으면 안됨

 

import pandas as pd

df = pd.read_csv('data/dust.csv', index_col=0)
df.head()

 

중복되는 row가 존재한다.

 

날짜를 출력해서 정확하게 확인을 다시한다.

날짜는 index이므로 index로 출력한다.

df.index
Index(['08월 11일', '08월 10일', '08월 09일', '08월 08일', '08월 07일', '08월 06일',
       '08월 05일', '08월 04일', '08월 03일', '08월 02일', '08월 01일', '07월 31일',
       '07월 31일', '07월 30일', '07월 29일', '07월 28일', '07월 27일', '07월 26일',
       '07월 25일', '07월 24일', '07월 23일', '07월 22일', '07월 21일', '07월 20일',
       '07월 19일', '07월 18일', '07월 17일', '07월 16일', '07월 15일', '07월 14일',
       '07월 13일'],
      dtype='object', name='날짜')

 

인덱스의 개수를 출력

df.index.value_counts()
날짜
07월 31일    2
08월 11일    1
07월 26일    1
07월 14일    1
07월 15일    1
07월 16일    1
07월 17일    1
07월 18일    1
07월 19일    1
07월 20일    1
07월 21일    1
07월 22일    1
07월 23일    1
07월 24일    1
07월 25일    1
07월 27일    1
08월 10일    1
07월 28일    1
07월 29일    1
07월 30일    1
08월 01일    1
08월 02일    1
08월 03일    1
08월 04일    1
08월 05일    1
08월 06일    1
08월 07일    1
08월 08일    1
08월 09일    1
07월 13일    1
Name: count, dtype: int64

 

인덱스의 개수를 출력해보니

7월 31일의 row만 2개임을 알 수있다.

 

 

7월 31일의 값들을 출력해본다.

df.loc['07월 31일']

모든 컬럼의 값이 일치한다.

 

중복되는 row삭제

df.drop_duplicates() 

- 중복된 row를 삭제한다.

 

기존 데이터에 중복row 없앤 데이터프레임을 덮어씌우려면 inplace=True 작성

 

df.drop_duplicates()
df.drop_duplicates(inplace=True)
df

 

중복된 row가 삭제되었다.

 


 

중복되는 columns찾기

만약 두 컬럼이 완전한 동일한 데이터를 갖고있다면 하나는 삭제해도 된다.

 

row와 컬럼 위치 변경

df.T

df.T

 

'강원'과 '강원.1'의 데이터 값이 동일하다.

df.T.drop_duplicates()

 

 

'강원'과 '강원.1'의 데이터 값이 동일하여 삭제되었다.

그리고 데이터를 다시 로우와 컬럼 위치를 변경시켜준다.

 

df = df.T.drop_duplicates().T
df

'데이터 분석 > Data_cleansing' 카테고리의 다른 글

데이터 클리닝(정확성)  (0) 2024.06.04
데이터 클리닝(완결성)  (0) 2024.06.04
데이터 정제  (0) 2024.06.04

[코드잇] 데이터클리닝 attendance.csv

 

완결성 (Completeness): 필수적인 데이터는 모두 기록되어 있어야함, 결측값이 처리

 

df = pd.read_csv('data/attendance.csv', index_col=0)
df

 

isnull() : 결측값을 True로 반환

결측값이 있는 위치 찾기

결측값이 있는 위치만 True반환

df.isnull()

 

결측값의 개수 세기

df.isnull().sum()

배구 컬럼에만 결측값이 3개가 있음을 알 수 있다.

 

결측값 해결방법

1.  그대로 두기
2. 결측값 레코드 지우기 dropna()

 

 

결측값 레코드 지우기

df.dropna()

 

배구에 결측값이 사라졌다.

결측값을 없앤 데이터프레임을 기존의 데이터에 덮어씌우려면 inplace=True를 작성해줘야 한다.

 

df.dropna(inplace=True)
df

 

기존데이터에서 2010, 2012, 2013년 데이터가 완전히 사라졌음을 알 수있다.


 

결측값이 많은 컬럼의 데이터만 포기하기

df = pd.read_csv('data/attendance.csv', index_col=0)
df

 

결측값이 있는 배구컬럼을 삭제한다.

 

기본값은 axis=0 이다.

 

axis=0(index)

- 행 방향 기준

 

axis=1(columns)

-열 방향 기준

 

둘 다 같은 결과 출력

df.dropna(axis=1)
df.dropna(axis='columns')

 

배구 컬럼이 제거되었다.

 


현재 가진 데이터를 보존하기 : 결측값 대체하기

1. df.fillna(0) : 0으로 채우기

2. df.fillna(df.mean()) : 평균으로 채우기

3. df.fillna(df.median()) : 중앙값으로 채우기

★기존 데이터를 변경하려면 inplace=True

 

 

결측값을 0으로 채우기

df.fillna(0)

 

 

결측값을 평균으로 채우기

df.fillna(df.mean())

 

결측값을 중앙값으로 채우기

df.fillna(df.median())

'데이터 분석 > Data_cleansing' 카테고리의 다른 글

데이터 클리닝(정확성)  (0) 2024.06.04
데이터 클리닝(유일성)  (0) 2024.06.04
데이터 정제  (0) 2024.06.04

완결성 (Completeness): 필수적인 데이터는 모두 기록되어 있어야함, 결측값이 처리
유일성 (Uniqueness): 동일한 데이터가 불필요하게 중복되어 있으면 안됨
통일성 (Conformity): 데이터가 동일한 형식으로 저장되어 있어야 함
정확성 (Accuracy): 데이터가 정확해야 함

 

결측값

  • 없는것이 제일 좋다
  • 자주 발생한다면 원인을 파악해야 한다.

 

이상점 (Outlier) : 다른 값들과 너무 동떨어져 있는 데이터

이상점을 판단하는 기준

 

boxplot : 25%, 75% 지점에서 1.5 * IQR 넘게 밑으로 떨어지면 이상점

 

이상점이 제대로 된 데이터

  • 분석에 방해가 되면 제거
  • 의미있는 정보라면 그냥 두기

관계적 이상점 (Realational Outlier) : 두 변수의 관계를 고려했을 때 이상한 데이터

'데이터 분석 > Data_cleansing' 카테고리의 다른 글

데이터 클리닝(정확성)  (0) 2024.06.04
데이터 클리닝(유일성)  (0) 2024.06.04
데이터 클리닝(완결성)  (0) 2024.06.04

1. [선 그래프 실습 문제] 국가별 경제 성장

 

실습 설명

한국(Korea_Rep), 미국(United_States), 영국(United_Kingdom), 독일(Germany), 중국(China), 일본(Japan)의 GDP 그래프를 그려 보세요.

%matplotlib inline
import pandas as pd

df = pd.read_csv('data/gdp.csv', index_col=0)

df.plot(y=['Korea_Rep', 'United_States','United_Kingdom','Germany','China','Japan'])

 

 


2. [막대 그래프 실습 문제] 실리콘 밸리에는 누가 일할까?1

실습 설명

실리콘 밸리에서 일하는 사람들의 정보가 있습니다.

직업, 종류, 인종, 성별 등이 포함되어 있는데요.

실리콘 밸리에서 일하는 남자 관리자(Managers)에 대한 인종 분포를 막대그래프로 다음과 같이 그려보세요.

 

 

%matplotlib inline
import pandas as pd

df = pd.read_csv('data/silicon_valley_summary.csv')
df

데이터 프레임을 출력해보면  인종(race_ethnicity)에 인덱스에 All이 포함되어 있다.

인종에 대한 그래프를 그려야 하므로 All을 제외 시켜야한다.

 

 

우리가 출력해야 하는 내용

1. 성별(gender) : 남자 (Male)

2. 직업(job_category) : 관리자 (Managers) 

3. 인종(race_ethnicity) : 모든 인종

gender = df['gender'] == 'Male'
job_category = df['job_category'] == 'Managers'
race_ethnicity = df['race_ethnicity'] != 'All'
df[gender & race_ethnicity & job_category]

조건에 맞는 df 출력

 

막대그래프 생성

df[gender & race_ethnicity & job_category].plot(kind='bar', x='race_ethnicity', y='count')

 


3. [파이 그래프 실습 문제] 실리콘 밸리에는 누가 일할까?2 

실습 설명

이번에는 어도비 (Adobe)의 직원 분포를 한번 살펴봅시다.

어도비 전체 직원들의 직군 분포를 파이 그래프로 그려보세요.

(인원이 0인 직군은 그래프에 표시되지 않아야 합니다.)

 

%matplotlib inline
import pandas as pd

df = pd.read_csv('data/silicon_valley_details.csv')
df

 

우리가 출력해야 하는 내용

1. 회사(company) : Adove

2. 인종(race) : Overall_totals

3. 인원(count)이 0인 직군 제외 : count가 0이면 제외

 

그리고 job_category에 있는 직군이 아닌 Totals와 job_category도 제외시켜준다.

boolean_adobe = df['company'] == 'Adobe'
boolean_all_races = df['race'] == 'Overall_totals'
boolean_count = df['count'] != 0
boolean_job_category = (df['job_category'] != 'Totals') & (df['job_category'] != 'Previous_totals')

 

조건에 맞게 df를 생성

df_adobe = df[boolean_adobe & boolean_all_races & boolean_count & boolean_job_category]
df_adobe

 

 

파이그래프 생성

df_adobe.plot(kind='pie', y='count')

 

파이그래프는 인덱스를 기준으로 범례를 생성한다.

따라서 우리가 원하는 직군들의 분포를 범례로 지정하려면

job_category가 인덱스로 바뀌어야한다.

set_index : 열을 인덱스로 지정

df_adobe.set_index('job_category', inplace=True)
df_adobe

job_category를 인덱스로 지정

 

df_adobe.plot(kind='pie', y= 'count')

 


4. [히스토그램 실습 문제] 스타벅스 음료의 칼로리는?1

실습 설명

스타벅스 음료의 칼로리 및 영양소 정보가 있습니다.

스타벅스 음료의 칼로리 분포는 어떻게 되는지, 히스토그램을 그려서 확인해 봅시다.

원하는 결과가 나오도록 df.plot() 메소드의 괄호를 채워 보세요!

칼로리의 구간은 총 20개로 나누어 주세요.

 

%matplotlib inline
import pandas as pd

df = pd.read_csv('data/starbucks_drinks.csv')

df.plot()

 

df.plot(kind = 'hist', y='Calories', bins = 20)

 

 


5. [박스플롯 실습 문제] 스타벅스 음료의 칼로리는?2

실습 설명

이번엔 스타벅스 음료의 칼로리를 박스 플롯으로 그려봅시다.

 

%matplotlib inline
import pandas as pd

df = pd.read_csv('data/starbucks_drinks.csv')

df.plot(kind='box',y='Calories')

 

박스수염 바깥으로 칼로리 500이 넘는 이상점이 하나 보입니다.

카페음료와 칼로리를 칼로리가 높은 순으로 출력해보겠습니다.

df.loc[:,['Beverage','Beverage_prep','Calories']].sort_values(by='Calories', ascending=False)

 

화이트초콜릿 모카가 510칼로리 음료였습니다.

 

'데이터 분석 > Data_visualization' 카테고리의 다른 글

데이터 시각화방법  (0) 2024.06.03
1. 시각화와 그래프  (0) 2024.06.03
시간 시각화 막대그래프, 누적막대그래프, 점/선그래프
분포 시각화 히스토그램, 파이차트, 도넛차트, 트리맵, 누적연속그래프, 상자그림, 커널밀도그림, 박스커널 플로팅, 밀도추정플로팅, 바이올린플롯, 자동산점도, 조밀도그래프, 카운트플롯
관계 시각화 산점도, 버블차트, 회귀그래프, 조인트플롯, 산점도행렬, 페어플롯, 네트워크그래프, 분포그래프, 관계트리그래프, 트리맵, 모자이크플롯, 스캐터플롯매트릭스
비교 시각화 히트맵, 체르노프페이스, 스타차트, 평행좌표계, 병렬좌표계, 다차원척도법, 레이더차트, 평행좌표축, 스트립플롯, 순위그래프
공간 시각화 지도 매핑, 카토그램, 등고선지도, 기하학적 모양, 격자지도, 군집그래프, 경로그래프, 동적맵, 3D지도, 닷지도
시계열 시각화 포인트시계열그림, 스트리밍 그래프, 로컬기간플로팅, 시간대플로팅, 분해플로팅, 윈도우플로팅, 시계열산점도, 로즈다이어그램, 분포시계열그래프, 시계열상자그림

 

'데이터 분석 > Data_visualization' 카테고리의 다른 글

[코드잇]그래프 시각화 실습문제  (0) 2024.06.04
1. 시각화와 그래프  (0) 2024.06.03

 

pip install matplotlib
%matplotlib inline

import pandas as pd 
import numpy as np 

import matplotlib.pyplot as plt # as in Pycharm 
import matplotlib as plt # as in Jupyter

 

맥에서 한글 깨짐 해결방법

from matplotlib import rc 

rc('font', family='AppleGothic')
plt.rcParams['axes.unicode_minus'] = False

 

 

 

 

 

1. 선 그래프

-- 기본 그래프는 선 그래프이다.

df.plot(kind = 'line')

 

 

 

한가지 그래프로 나타내기

df.plot(y='KBS')

 

 

여러개 그래프 나타내기

df.plot(y=['KBS','JTBC'])

df[['KBS','JTBC']]

df[['KBS','JTBC']].plot()

 

 

2. 막대그래프

df.plot(kind='bar')

 

 

 

 

막대그래프 가로로 눕히기

df.plot(kind='barh')

 

 

 

스택형 막대 그래프를 생성. 즉, 각 막대는 여러 데이터 시리즈의 값을 누적하여 표시

df.plot(kind='bar', stacked=True)

 

 

 

여성 그래프 생성

df['Female'].plot(kind='bar')

 

 

3. 파이그래프

df.loc[2017].plot(kind='pie')

 

 

 

4. 히스토그램

df.plot(kind='hist', y='Height')

 

 

 

 

bins : 히스토그램에서 데이터를 나눌 구간(bins)의 수를 15개로 지정

df.plot(kind='hist', y='Height', bins = 15)

 

 

5. 박스플롯

describe() : 선택된 열의 기술 통계량을 계산

df['math score'].describe()
count    1000.00000
mean       66.08900
std        15.16308
min         0.00000
25%        57.00000
50%        66.00000
75%        77.00000
max       100.00000
Name: math score, dtype: float64

반환되는 기술 통계량

  • count: 값의 개수
  • mean: 평균
  • std: 표준편차
  • min: 최솟값
  • 25%: 제1사분위수 (하위 25%의 값)
  • 50%: 중앙값 (중앙에 위치한 값, 제2사분위수)
  • 75%: 제3사분위수 (하위 75%의 값)
  • max: 최댓값

 

박스플롯 생성

df.plot(kind = 'box', y='math score')

 

 

df.plot(kind = 'box', y=['math score', 'reading score', 'writing score'])

 

 

 

6. 산점도

df.plot(kind='scatter', x='math score', y='reading score')

 

 

df.plot(kind='scatter', x='math score', y='writing score')

'데이터 분석 > Data_visualization' 카테고리의 다른 글

[코드잇]그래프 시각화 실습문제  (0) 2024.06.04
데이터 시각화방법  (0) 2024.06.03

데이터타입 알기

df.dtype

import pandas as pd

two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]

my_df = pd.DataFrame(two_dimensional_list, columns=['name', 'english_score', 'math_score'], index=['a', 'b', 'c', 'd'])
'''
한 column 내에서는 모든 값이 동일한 데이터 타입입니다.

name             object
english_score     int64
math_score        int64
dtype: object
'''

'''
pandas의 dtype들
pandas에 담을 수 있는 dtype(데이터 타입) 몇 가지를 살펴봅시다.

int64	정수
float64	소수
object	텍스트
bool	불린(참과 거짓)
datetime64	날짜와 시간
category	카테고리

'''

 

 

데이터 읽어들이기

import pandas as pd

iphone_df = pd.read_csv('iphone.csv', index_col=0) # 0번째 인덱스의 컬럼
# 헤더가 없는 경우
# iphone_df = pd.read_csv('iphone.csv, header = None')

print(iphone_df)
print(type(iphone_df))

 

'데이터 분석 > pandas' 카테고리의 다른 글

1. Pandas  (0) 2024.06.03

Pandas

1. 목적 및 사용 용도

  • 목적: 데이터 분석과 조작을 위해 설계된 라이브러리입니다.
  • 사용 용도: 데이터 프레임 객체(DataFrame)를 사용하여 테이블 형태의 데이터를 쉽게 조작하고 분석할 수 있습니다. 데이터 정리, 필터링, 집계, 시계열 분석 등에 주로 사용됩니다.
  • 구조: 판다스 데이터 프레임은 서로 다른 데이터 타입을 가질 수 있는 여러 열로 구성되며, 엑셀이나 SQL의 테이블과 유사한 형식을 가지고 있습니다.

2. 주요 데이터 구조

  • Series: 일차원 배열과 유사한 데이터 구조로, 인덱스를 가지고 있어 특정 값을 쉽게 조회할 수 있습니다.
  • DataFrame: 이차원 배열과 유사한 데이터 구조로, 각 열이 서로 다른 데이터 타입을 가질 수 있습니다. 행과 열에 대해 인덱스를 사용하여 데이터를 조작하고 분석할 수 있습니다.

3. 데이터 조작 및 기능

  • 데이터 필터링, 그룹화, 집계, 결합, 피벗 테이블 생성 등의 데이터 조작에 중점을 둡니다.
  • 결측치 처리, 데이터 정렬, 데이터 형식 변환 등 데이터 분석에 필요한 다양한 기능을 제공합니다.
  • 시계열 데이터 처리에 강력한 기능을 가지고 있습니다.

4. 성능

  • 데이터 조작 및 분석 기능이 풍부하지만, 데이터 구조가 더 복잡하기 때문에 넘파이에 비해 메모리 사용량이 많고, 성능이 떨어질 수 있습니다.
  • 내부적으로 넘파이를 사용하여 성능을 개선하지만, 여전히 대규모 데이터 처리에서는 넘파이에 비해 느릴 수 있습니다.

요약

  • 판다스는 주로 데이터 분석 및 조작에 사용됩니다.
  • 판다스는 서로 다른 데이터 타입을 가진 테이블 형식의 데이터를 다루는 데 강점

 

import pandas as pd
import numpy as np
two_dimensional_list = [['dongwook',50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91,], ['jeongryun', 82, 83]]
my_df = pd.DataFrame(two_dimensional_list, columns=['name', 'eng_score', 'math_score'], index=['a','b','c','d'])

print(my_df)
'''
        name  eng_score  math_score
a   dongwook         50          86
b     sineui         89          31
c    ikjoong         68          91
d  jeongryun         82          83
'''

 

 

★주의

같은 컬럼내에서는 동일한 타입이어야한다.

# 타입 확인
print(type(my_df)) #<class 'pandas.core.frame.DataFrame'>

# 컬럼 확인
print(my_df.columns) #Index(['name', 'eng_score', 'math_score'], dtype='object')

# 인덱스 확인
print(my_df.index) #Index(['a', 'b', 'c', 'd'], dtype='object')

print(my_df.dtypes)
'''
같은 칼럼내에서는 동일한 타입이어야한다.

name          object
eng_score      int64
math_score     int64
dtype: object
'''

 

 

DataFrame 생성 방법

- 2차원 리스트나 2차원 numpy array로 DataFrame을 생성할 수 있다.

- pandas Series를 담고 있는 리스트로도 DataFrame을 만들 수 있다.

 

2차원 리스트

# 2차원리스트
two_dimensional_list = [['dongwook', 50, 86], ['sineui', 89, 31], ['ikjoong', 68, 91], ['yoonsoo', 88, 75]]

# 리스트를 array로 바꾸기
two_dimensional_array = np.array(two_dimensional_list)

# 판다스 시리즈로 리스트에 저장
list_of_series = [
    pd.Series(['dongwook', 50, 86]),
    pd.Series(['sineui', 89, 31]),
    pd.Series(['ikjoong', 68, 91]),
    pd.Series(['yoonsoo', 88, 75])
]

 

데이터프레임 생성

# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(two_dimensional_list)
df2 = pd.DataFrame(two_dimensional_array)
df3 = pd.DataFrame(list_of_series)
print(df1)
'''
          0   1   2
0  dongwook  50  86
1    sineui  89  31
2   ikjoong  68  91
3   yoonsoo  88  75

'''

 

 

파이썬 딕셔너리(dictionary)로  DataFrame 생성

- 딕셔너리의 key로는 column 이름 입력

- column에 해당하는 리스트, numpy array, 혹은 pandas Series를 딕셔너리의 value로 넣어주면 된다.

 

names = ['dongwook', 'sineui', 'ikjoong', 'yoonsoo']
english_scores = [50, 89, 68, 88]
math_scores = [86, 31, 91, 75]

dict1 = {
    'name': names,
    'english_score': english_scores,
    'math_score': math_scores
}

dict2 = {
    'name': np.array(names),
    'english_score': np.array(english_scores),
    'math_score': np.array(math_scores)
}

dict3 = {
    'name': pd.Series(names),
    'english_score': pd.Series(english_scores),
    'math_score': pd.Series(math_scores)
}
# 아래 셋은 모두 동일합니다
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
df3 = pd.DataFrame(dict3)
print(df1)

 

리스트가 담긴 딕셔너리가 아니라, 딕셔너리가 담긴 리스트로도 DataFrame을 만들 수 있다.

 

my_list = [
    {'name': 'dongwook', 'english_score': 50, 'math_score': 86},
    {'name': 'sineui', 'english_score': 89, 'math_score': 31},
    {'name': 'ikjoong', 'english_score': 68, 'math_score': 91},
    {'name': 'yoonsoo', 'english_score': 88, 'math_score': 75}
]

df = pd.DataFrame(my_list)
print(df)