文章目錄
- 需求
- 一、資料預處理
- 二、資料處理
- 總結
需求
源資料獲取–密碼:6qpt
- 匯入檔案,查看原始資料
- 將人口資料和各州簡稱資料進行合并
- 將合并的資料中重復的abbreviation列進行洗掉
- 查看存在缺失資料的列
- 找到有哪些state/region使得state的值為NaN,進行去重操作
- 為找到的這些state/region的state項補上正確的值,從而去除掉state 這一列的所有NaN
- 合并各州面積資料areas
- 我們會發現area(sq.mi)這一列有缺失資料,找出是哪些行
- 去除含有缺失資料的行
- 找出2010年的全民人口資料
- 計算各州的人口密度
- 排序,并找出人口密度最高的五個州 df.sort_values()
一、資料預處理
- 匯入包
import pandas as pd
import numpy as np
from pandas import DataFrame
- 匯入檔案 查看原始資料
abb = pd.read_csv('./data/state-abbrevs.csv')
abb
# state:全稱 abbreviation:簡稱

pop = pd.read_csv('./data/state-population.csv')
pop

area = pd.read_csv('./data/state-areas.csv')
area

- 將各州資料【abb】和人口資料【pop】進行合并
使用
outer:保證資料完整性
[Python3]pandas.merge用法詳解
abb_pop = pd.merge(abb,pop,left_on='abbreviation',right_on='state/region',how='outer')
abb_pop.head()

- 將合并后的資料列進行洗掉 : abbreviation
# inplace作用在原DataFrame上
abb_pop.drop(labels='abbreviation',axis=1,inplace=True)
abb_pop.head()

查看表中的缺失資料
info()
isnull().any(axis=0)?
abb_pop.info()

# isnull()和any 連接使用
abb_pop.isnull().any(axis=0)

二、資料處理
- 找到有哪些state/region使得state的值為NaN,進行去重操作【將state中空值對應的簡稱找到,對找到的簡稱進行去重操作】
abb_pop.head()

步驟:
- 找到state中的空值
- 將state中的空值對應的簡稱找到
- 對簡稱去重
abb_pop['state'].isnull()

# 將布林值作為資料的索引 取出對應的行資料
abb_pop.loc[abb_pop['state'].isnull()]

abb_pop.loc[abb_pop['state'].isnull()]['state/region']

abb_pop.loc[abb_pop['state'].isnull()]['state/region'].unique()
array([‘PR’, ‘USA’], dtype=object)
為找到的這些state/region的state項補上正確的值,從而去除掉state 這一列的所有NaN
- fillna():填充成一致的 – 不適用于該專案
- PR:填充為對應的全稱 USA:填充為對應的全稱
實作:
- 根據簡稱將簡稱對應的全稱的空值找到
- 將找到的空值填充稱對應的全稱即可
# 1. 將PR對應的行找到
abb_pop['state/region'] == 'PR'

別看這顯示都是False,True都在里面藏著呢!
abb_pop.loc[abb_pop['state/region'] == 'PR']

# 2. 獲取行索引
indexs = abb_pop.loc[abb_pop['state/region'] == 'PR'].index
indexs
Int64Index([2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458,2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480,2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491,2492, 2493, 2494, 2495],dtype=‘int64’)
# 3. 做批量賦值
abb_pop.loc[indexs,'state'] = 'PPPRRR'
abb_pop.loc[abb_pop['state/region'] == 'PR']

同理對簡稱為USA的操作是一樣進行的
abb_pop['state/region'] == 'USA'
indexsusa = abb_pop.loc[abb_pop['state/region'] == 'USA'].index
abb_pop.loc[indexsusa,'state'] = 'United States'
abb_pop.loc[abb_pop['state/region'] == 'USA']

- 合并各州面積資料areas
abb_pop.head()

area.head()

abb_pop_area = pd.merge(abb_pop,area,on='state',how='outer')
abb_pop_area

- 我們會發現area(sq.mi)這一列有缺失資料,找出是哪些行
abb_pop_area['area (sq. mi)'].isnull()

abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()]

# 獲取索引
indexs = abb_pop_area.loc[abb_pop_area['area (sq. mi)'].isnull()].index
indexs
Int64Index([2448, 2449, 2450, 2451, 2452, 2453, 2454, 2455, 2456, 2457, 2458,2459, 2460, 2461, 2462, 2463, 2464, 2465, 2466, 2467, 2468, 2469,2470, 2471, 2472, 2473, 2474, 2475, 2476, 2477, 2478, 2479, 2480,2481, 2482, 2483, 2484, 2485, 2486, 2487, 2488, 2489, 2490, 2491,2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502,2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511, 2512, 2513,2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523, 2524,2525, 2526, 2527, 2528, 2529, 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2537, 2538, 2539, 2540, 2541, 2542, 2543], dtype=‘int64’)
- 去除含有缺失資料的行
# drop系列的函式 0:行 1:列
abb_pop_area.drop(labels=indexs,axis=0,inplace=True)
- 找出2010年的全民人口資料
query():條件查詢 ?
abb_pop_area.head()

abb_pop_area.info()

abb_pop_area.query('ages == "total" & year == 2010')

- 計算各州的人口密度 人口/區域面積,將人口密度資料匯總到源資料(添加一列)
abb_pop_area['population'] / abb_pop_area['area (sq. mi)']

abb_pop_area['midu'] = abb_pop_area['population'] / abb_pop_area['area (sq. mi)']
abb_pop_area.head()

- 排序,并找出人口密度最高的五個州
df.sort_values()
abb_pop_area.sort_values(by='midu')

abb_pop_area.sort_values(by='midu',axis=0,ascending=False)

總結
- 關于iloc與loc的索引問題
- loc:顯示索引
- iloc:隱世索引

abb_pop_area.sort_values(by='midu',axis=0,ascending=False).iloc[0]['state']
‘District of Columbia’
abb_pop_area.sort_values(by='midu',axis=0,ascending=False).loc[51]['state']
‘Alaska’
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/336285.html
標籤:其他
