一、 創(chuàng)建數(shù)據(jù)
import pandas as pd
import numpy as np
# 一、 創(chuàng)建數(shù)據(jù)
ipl_data = {'國家': ['中國', '美國', '韓國', '韓國', '日本','日本', '中國', '中國'],
'職業(yè)': ['老師', '商人', '運(yùn)動(dòng)員', '運(yùn)動(dòng)員', '醫(yī)生', '老師','律師','客服'],
'年齡': [28, 27, 29, 30, 27, 35,28 ,28],
'體重': [54, 60, 70, 65, 55, 50, 52, 47],
'身高': [165, 170, 168, 168, 180, 175, 172, 160],
'性別':['男', '男', '女', '男', '女', '男', '男', '女']}
df = pd.DataFrame(ipl_data)
print(df)
體重 國家 年齡 性別 職業(yè) 身高
0 54 中國 28 男 老師 165
1 60 美國 27 男 商人 170
2 70 韓國 29 女 運(yùn)動(dòng)員 168
3 65 韓國 30 男 運(yùn)動(dòng)員 168
4 55 日本 27 女 醫(yī)生 180
5 50 日本 35 男 老師 175
6 52 中國 28 男 律師 172
7 47 中國 28 女 客服 160
二徙邻、讀取數(shù)據(jù)
filepath = 'dataset.csv'
df = pd.read_csv(filepath)
# pd.read_excel(filepath
# pd.read_json(filepath)
三、保存數(shù)據(jù)
filepath = 'dataset.csv'
df.to_csv(filepath)
# df.to_excel(filepath)
四畸裳、查看數(shù)據(jù)
1. 查看頭部數(shù)據(jù)
print(df.head(3)) # 查看頭3行數(shù)據(jù)
print(df.tail(3)) # 查看后3行數(shù)據(jù)
體重 國家 年齡 性別 職業(yè) 身高
0 54 中國 28 男 老師 165
1 60 美國 27 男 商人 170
2 70 韓國 29 女 運(yùn)動(dòng)員 168
體重 國家 年齡 性別 職業(yè) 身高
5 50 日本 35 男 老師 175
6 52 中國 28 男 律師 172
2. 格式查看
print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8 entries, 0 to 7
Data columns (total 6 columns):
體重 8 non-null int64
國家 8 non-null object
年齡 8 non-null int64
性別 8 non-null object
職業(yè) 8 non-null object
身高 8 non-null int64
dtypes: int64(3), object(3)
memory usage: 464.0+ bytes
None
3. 查看統(tǒng)計(jì)信息(這個(gè)操作只針對數(shù)值型的列)
print(df.describe())
體重 年齡 身高
count 8.000000 8.000000 8.000000
mean 56.625000 29.000000 169.750000
std 7.818248 2.618615 6.112049
min 47.000000 27.000000 160.000000
25% 51.500000 27.750000 167.250000
50% 54.500000 28.000000 169.000000
75% 61.250000 29.250000 172.750000
max 70.000000 35.000000 180.000000
五缰犁、基本處理
1. 增
df['愛好'] = ['運(yùn)動(dòng)', '看書', '旅行', '旅行', '拍照', '唱歌', '畫畫', '唱歌']
print(df)
體重 國家 年齡 性別 職業(yè) 身高 愛好
0 54 中國 28 男 老師 165 運(yùn)動(dòng)
1 60 美國 27 男 商人 170 看書
2 70 韓國 29 女 運(yùn)動(dòng)員 168 旅行
3 65 韓國 30 男 運(yùn)動(dòng)員 168 旅行
4 55 日本 27 女 醫(yī)生 180 拍照
5 50 日本 35 男 老師 175 唱歌
6 52 中國 28 男 律師 172 畫畫
7 47 中國 28 女 客服 160 唱歌
2. 刪
df.drop(['身高', '體重'], axis=1, inplace=True)
print(df)
國家 年齡 性別 職業(yè)
0 中國 28 男 老師
1 美國 27 男 商人
2 韓國 29 女 運(yùn)動(dòng)員
3 韓國 30 男 運(yùn)動(dòng)員
4 日本 27 女 醫(yī)生
5 日本 35 男 老師
6 中國 28 男 律師
7 中國 28 女 客服
3. 選
df1 = df[['國家', '年齡']]
print(df1)
國家 年齡
0 中國 28
1 美國 27
2 韓國 29
3 韓國 30
4 日本 27
5 日本 35
6 中國 28
7 中國 28
4. 改
# ACCESSOR,可以將它理解為一種屬性接口,通過它可以獲得額外的方法
print(pd.Series._accessors)
print([i for i in dir(pd.Series.str) if not i.startswith('_')])
df['國家'].str.replace('美', '英')
print(df)
{'str', 'cat', 'dt'}
['capitalize', 'cat', 'center', 'contains', 'count', 'decode', 'encode', 'endswith', 'extract', 'extractall', 'find', 'findall', 'get', 'get_dummies', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'islower', 'isnumeric', 'isspace', 'istitle', 'isupper', 'join', 'len', 'ljust', 'lower', 'lstrip', 'match', 'normalize', 'pad', 'partition', 'repeat', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'slice', 'slice_replace', 'split', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'wrap', 'zfill']
體重 國家 年齡 性別 職業(yè) 身高
0 54 中國 28 男 老師 165
1 60 英國 27 男 商人 170
2 70 韓國 29 女 運(yùn)動(dòng)員 168
3 65 韓國 30 男 運(yùn)動(dòng)員 168
4 55 日本 27 女 醫(yī)生 180
5 50 日本 35 男 老師 175
6 52 中國 28 男 律師 172
7 47 中國 28 女 客服 160
5. 單(多)列運(yùn)算
df['年齡'] = df['年齡'] + 10
df['年齡乘體重'] = df['年齡'] * df['體重']
df['年齡乘以2'] = df['年齡'].map(lambda x: x*2)
df['col3'] = df.apply(lambda x: x['col1'] + 2 * x['col2'], axis=1)
print(df)
體重 國家 年齡 性別 職業(yè) 身高 年齡乘體重
0 54 中國 38 男 老師 165 2052
1 60 美國 37 男 商人 170 2220
2 70 韓國 39 女 運(yùn)動(dòng)員 168 2730
3 65 韓國 40 男 運(yùn)動(dòng)員 168 2600
4 55 日本 37 女 醫(yī)生 180 2035
5 50 日本 45 男 老師 175 2250
6 52 中國 38 男 律師 172 1976
7 47 中國 38 女 客服 160 1786
六怖糊、重復(fù)數(shù)據(jù)
6.2 判斷某列是否重復(fù)
flag = df['國家'].duplicated()
df['is_repeat'] = flag
print(df[['國家', 'is_repeat']])
國家 is_repeat
0 中國 False
1 美國 False
2 韓國 False
3 韓國 True
4 日本 False
5 日本 True
6 中國 True
7 中國 True
6.3 判斷dataframe數(shù)據(jù)整行是否重復(fù)
flag = df.duplicated()
df['is_repeat'] = flag
print(df)
體重 國家 年齡 性別 職業(yè) 身高 is_repeat
0 54 中國 28 男 老師 165 False
1 60 美國 27 男 商人 170 False
2 70 韓國 29 女 運(yùn)動(dòng)員 168 False
3 65 韓國 30 男 運(yùn)動(dòng)員 168 False
4 55 日本 27 女 醫(yī)生 180 False
5 50 日本 35 男 老師 175 False
6 52 中國 28 男 律師 172 False
7 47 中國 28 女 客服 160 False
6.4 判斷dataframe數(shù)據(jù)多列數(shù)據(jù)是否重復(fù)(多列組合查)
flag = df.duplicated(subset = ['國家', '性別'])
df['is_repeat'] = flag
print(df)
體重 國家 年齡 性別 職業(yè) 身高 is_repeat
0 54 中國 28 男 老師 165 False
1 60 美國 27 男 商人 170 False
2 70 韓國 29 女 運(yùn)動(dòng)員 168 False
3 65 韓國 30 男 運(yùn)動(dòng)員 168 False
4 55 日本 27 女 醫(yī)生 180 False
5 50 日本 35 男 老師 175 False
6 52 中國 28 男 律師 172 True
7 47 中國 28 女 客服 160 False
6.5 去重
# DataFrame.drop_duplicates(subset=None, keep='first', inplace=False)
df.drop_duplicates(subset = ['國家', '性別'], keep='last', inplace=True)
print(df)
# drop_duplicats參數(shù)說明:
# 參數(shù)subset
# subset用來指定特定的列帅容,默認(rèn)所有列
# 參數(shù)keep
# keep可以為first和last,表示是選擇最前一項(xiàng)還是最后一項(xiàng)保留伍伤,默認(rèn)first
# 參數(shù)inplace
# inplace是直接在原來數(shù)據(jù)上修改還是保留一個(gè)副本并徘,默認(rèn)為False
根據(jù)['國家', '性別']進(jìn)行去重,行索引為0的數(shù)據(jù)被刪除了扰魂,保留了行索引為7的數(shù)據(jù)
體重 國家 年齡 性別 職業(yè) 身高
1 60 美國 27 男 商人 170
2 70 韓國 29 女 運(yùn)動(dòng)員 168
3 65 韓國 30 男 運(yùn)動(dòng)員 168
4 55 日本 27 女 醫(yī)生 180
5 50 日本 35 男 老師 175
6 52 中國 28 男 律師 172
7 47 中國 28 女 客服 160