본문 바로가기

Pandas

Pandas 데이터 추출, 활용 하기 : loc, iloc 활용 [행단위]

반응형

Pandas의 DataFrame을 보면 type(pandas_DF)형을 확인하면 <pandas.core.frame.DataFrame'>을 확인됩니다. 하지만 일부 필드로 가져올 때는 <pandas.core.series.Series'>으로 변경이 됩니다.

 

행 단위로 추출하는 방법으로 loc, iloc속성을 사용해야 합니다. 

속성 설명
loc 인덱스를 기준으로 행 데이터 추출
iloc 행 번호를 기준으로 행 데이터 추출

 

import pandas as pd

pandas_DF = pd.read_csv(r'C:\Users\HANA\PycharmProjects\HANATOUR\Pandas\doit_pandas-master\data\gapminder.tsv', sep='\t')
print("\n-- type(pandas_DF)\n", type(pandas_DF))
print("\n-- pandas_DF.columns\n", pandas_DF.columns)
print("\n-- pandas_DF.shape\n", type(pandas_DF.shape))
print("\n-- pandas_DF.shape\n", pandas_DF.shape)

country_df = pandas_DF['country']
print("\n-- type(country_df)\n", type(country_df))
print("\n-- country_df.head()\n", country_df.head())
print("\n-- country_df.tail()\n", country_df.tail())

subset = pandas_DF[['country','continent','year']]
print("\n-- type(subset)\n", type(subset))

print("\n-- subset.head()\n", subset.head())
print("\n-- subset.tail()\n", subset.tail())

print("\n-- pandas_DF.loc[0]\n", pandas_DF.loc[0])
print("\n-- pandas_DF.loc[99]\n", pandas_DF.loc[99])

number_of_rows = pandas_DF.shape[0]
last_row_index = number_of_rows - 1
print("\n-- pandas_DF.loc[last_row_index]\n", pandas_DF.loc[last_row_index])
print("\n-- pandas_DF.tail(1)\n", pandas_DF.tail(1))

print("\n-- pandas_DF.iloc[0]\n", pandas_DF.iloc[0])
print("\n-- pandas_DF.iloc[99]\n", pandas_DF.iloc[99])
print("\n-- pandas_DF.iloc[-1]\n", pandas_DF.iloc[-1])
print("\n-- pandas_DF.iloc[0,99,999]\n", pandas_DF.iloc[[0,99,999]])

일반적인 내용은 직접 실행하면 이해를 할 수 있습니다.

 

마지막 행 데이터를 추출하는 방법에 있어 loc, iloc의 방법이 다릅니다.

loc의 경우 마지막 행 데이터의 인덱스를 알아내야 합니다. shape[0]에 행 크기(1704)가 저자오디어 있다는 점을 이용하여 마지막 행의 인덱스를 구하면 됩니다. shape[0]에서 1을 뺀 값으로 마지막 행 데이터를 추출하면 됩니다.

 

iloc의 경우 -1을 입력하면 됩니다.  iloc를 이용하여 한번에 여러 데이터를 한번에 뽑을 수 있습니다.  iloc[[0,99,999]]이런식으로 []안에 여러 번호를 적어주면 됩니다. 

-- pandas_DF.columns
 Index(['country', 'continent', 'year', 'lifeExp', 'pop', 'gdpPercap'], dtype='object')

-- pandas_DF.shape
 <class 'tuple'>

-- pandas_DF.shape
 (1704, 6)
<class 'pandas.core.series.Series'>
0    Afghanistan
1    Afghanistan
2    Afghanistan
3    Afghanistan
4    Afghanistan
Name: country, dtype: object
1699    Zimbabwe
1700    Zimbabwe
1701    Zimbabwe
1702    Zimbabwe
1703    Zimbabwe
Name: country, dtype: object
<class 'pandas.core.frame.DataFrame'>

-- subset.head()
        country continent  year
0  Afghanistan      Asia  1952
1  Afghanistan      Asia  1957
2  Afghanistan      Asia  1962
3  Afghanistan      Asia  1967
4  Afghanistan      Asia  1972

-- subset.tail()
        country continent  year
1699  Zimbabwe    Africa  1987
1700  Zimbabwe    Africa  1992
1701  Zimbabwe    Africa  1997
1702  Zimbabwe    Africa  2002
1703  Zimbabwe    Africa  2007

-- pandas_DF.loc[0]
 country      Afghanistan
continent           Asia
year                1952
lifeExp           28.801
pop              8425333
gdpPercap        779.445
Name: 0, dtype: object

-- pandas_DF.loc[99]
 country      Bangladesh
continent          Asia
year               1967
lifeExp          43.453
pop            62821884
gdpPercap       721.186
Name: 99, dtype: object

-- pandas_DF.loc[last_row_index]
 country      Zimbabwe
continent      Africa
year             2007
lifeExp        43.487
pop          12311143
gdpPercap     469.709
Name: 1703, dtype: object

-- pandas_DF.tail(1)
        country continent  year  lifeExp       pop   gdpPercap
1703  Zimbabwe    Africa  2007   43.487  12311143  469.709298

-- pandas_DF.iloc[0]
 country      Afghanistan
continent           Asia
year                1952
lifeExp           28.801
pop              8425333
gdpPercap        779.445
Name: 0, dtype: object

-- pandas_DF.iloc[99]
 country      Bangladesh
continent          Asia
year               1967
lifeExp          43.453
pop            62821884
gdpPercap       721.186
Name: 99, dtype: object

-- pandas_DF.iloc[-1]
 country      Zimbabwe
continent      Africa
year             2007
lifeExp        43.487
pop          12311143
gdpPercap     469.709
Name: 1703, dtype: object

-- pandas_DF.iloc[0,99,999]
          country continent  year  lifeExp       pop    gdpPercap
0    Afghanistan      Asia  1952   28.801   8425333   779.445314
99    Bangladesh      Asia  1967   43.453  62821884   721.186086
999     Mongolia      Asia  1967   51.253   1149500  1226.041130
반응형