part1数据探索及数据处理
数据探索
import pandas as pd # 导入数据集 df = pd.read_excel("~/user_orders.xlsx")
# 查看前五行 print('查看前五行:',df.head())
查看前五行: id name gender age edu custom_amt order_date
0 890 李小胆李l female 43.0 NaN ¥2177.94 2018年12月25日
1 2391 881xt male 52.0 NaN ¥2442.18 2017年5月24日
2 2785 haoah male 39.0 NaN ¥849.79 2018年5月15日
3 1361 snaen female 26.0 NaN ¥2482.22 2018年5月16日
4 888 sue女少 female 61.0 本科 ¥2027.9 2018年1月21日
# 查看后七行 print('查看后七行:',df.tail(7))
查看后七行: id name gender age edu custom_amt order_date
2997 1270 是大航oj male 32.0 NaN ¥115.92 2018年7月23日
2998 835 嗒白白嗒蘇 female 40.0 本科 ¥897.26 2017年4月15日
2999 2926 宝哒哇是我 female NaN NaN ¥542.02 2018年9月1日
3000 1616 和花花豆豆 female 64.0 本科 ¥2593.38 2018年11月3日
3001 1129 小清新桉蓝 female 61.0 NaN ¥139.68 2018年11月7日
3002 674 xyyx毓 female 34.0 本科 ¥670.89 2018年6月8日
3003 229 大侦探野荒 male 64.0 NaN ¥118.37 2018年7月13日
# 查看数据的规模 print('数据的规模:',df.shape)
数据的规模: (3004, 7)
# 查看数据行索引 print('行索引',df.index)
行索引 RangeIndex(start=0, stop=3004, step=1) #前包后不包
# 查看数据列名 print('数据列名',df.columns)
数据列名 Index(['id', 'name', 'gender', 'age', 'edu', 'custom_amt', 'order_date'], dtype='object')
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3004 entries, 0 to 3003
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 id 3004 non-null int64
1 name 3004 non-null object
2 gender 2868 non-null object
3 age 2904 non-null float64
4 edu 1073 non-null object
5 custom_amt 3004 non-null object
6 order_date 3004 non-null object
dtypes: float64(1), int64(1), object(5)
memory usage: 164.4+ KB
# 查看整体信息 print('整体信息',df.info())
整体信息 None
# 进行简单描述统计,默认统计数值类型 print('描述统计',df.describe())
描述统计 id age
count 3004.000000 2904.000000
mean 1499.905459 41.605028
std 865.906555 14.158348
min 1.000000 19.000000
25% 750.750000 30.000000
50% 1499.500000 40.000000
75% 2249.250000 55.000000
max 3000.000000 230.000000
# 查看数据集是否存在缺失值 print('缺失值',df.isnull()) print('缺失值个数',df.isnull().sum())
缺失值 id name gender age edu custom_amt order_date
0 False False False False True False False
1 False False False False True False False
2 False False False False True False False
3 False False False False True False False
4 False False False False False False False
... ... ... ... ... ... ... ...
2999 False False False True True False False
3000 False False False False False False False
3001 False False False False True False False
3002 False False False False False False False
3003 False False False False True False False
[3004 rows x 7 columns]
缺失值个数 id 0
name 0
gender 136
age 100
edu 1931
custom_amt 0
order_date 0
dtype: int64
# 查看数据是否存在重复值 print('重复值',df.duplicated()) print('重复值个数',df.duplicated().sum())
重复值 0 False
1 False
2 False
3 False
4 False
...
2999 False
3000 False
3001 False
3002 False
3003 False
Length: 3004, dtype: bool
重复值个数 4
# 提取某一列 print('提取某一列',df["gender"])
提取某一列 0 female
1 male
2 male
3 female
4 female
...
2999 female
3000 female
3001 female
3002 female
3003 male
Name: gender, Length: 3004, dtype: object
# 提取行 print('提取行',df[:2]) # 左闭右开
提取行 id name gender age edu custom_amt order_date
0 890 李小胆李l female 43.0 NaN ¥2177.94 2018年12月25日
1 2391 881xt male 52.0 NaN ¥2442.18 2017年5月24日
## 基于标签的索引——loc方法 # 提取数据的5-10行,并返回其姓名、年龄、交易额 print('5-10行,并返回其姓名、年龄、交易额',df.loc[5:10,["name","age","custom_amt"]])
5-10行,并返回其姓名、年龄、交易额 name age custom_amt
5 824bt 42.0 ¥854.57
6 angil 64.0 ¥2661.94
7 280_t 32.0 ¥70.66
8 ugvuf 48.0 ¥2346.97
9 王歆允歆王 60.0 ¥658.3
10 641兔小 37.0 ¥1751.68
# 设置索引 df1 = df.set_index("name") print('设置索引',df1.head())
设置索引 id gender age edu custom_amt order_date
name
李小胆李l 890 female 43.0 NaN ¥2177.94 2018年12月25日
881xt 2391 male 52.0 NaN ¥2442.18 2017年5月24日
haoah 2785 male 39.0 NaN ¥849.79 2018年5月15日
snaen 1361 female 26.0 NaN ¥2482.22 2018年5月16日
sue女少 888 female 61.0 本科 ¥2027.9 2018年1月21日
# 提取某位用户的信息,并返回其姓名、年龄、学历 print('提取某位用户的信息',df1.loc[["615uy"],["gender","age","edu"]])
提取某位用户的信息 gender age edu
name
615uy female 35.0 NaN
# 提取某位用户的全部信息 print('提取某位用户的全部信息',df1.loc["615uy",:]) print('提取某位用户的全部信息',df.loc[df["name"]=="615uy",:])
提取某位用户的全部信息 id 1863
gender female
age 35
edu NaN
custom_amt ¥1515.64
order_date 2017年9月22日
Name: 615uy, dtype: object
提取某位用户的全部信息 id name gender age edu custom_amt order_date
323 1863 615uy female 35.0 NaN ¥1515.64 2017年9月22日
# 提取年龄小于20的用户信息 print('年龄小于20的用户信息',df.loc[df["age"]<20,:]) # 第一个位置设置索引,第二个位置取列
年龄小于20的用户信息 id name gender age edu custom_amt order_date
170 796 e慕月ra female 19.0 NaN ¥1674.06 2017年11月21日
175 1481 野千昭野宫 male 19.0 NaN ¥912.69 2017年3月10日
235 345 悸01初如 female 19.0 NaN ¥1039.5 2018年5月10日
303 2386 657护守 male 19.0 NaN ¥1432.64 2017年9月2日
372 1190 范万莉万范 male 19.0 本科 ¥1426.22 2018年11月21日
378 1396 120菲菲 female 19.0 NaN ¥351.32 2017年1月6日
444 2502 老鸨1老老 female 19.0 硕士 ¥2305.88 2017年8月2日
471 738 尼玛哥尼冉 NaN 19.0 NaN ¥2885 2017年3月22日
531 2207 080_t female 19.0 NaN ¥1051.39 2018年3月14日
560 178 ong龙晓 female 19.0 NaN ¥2441.18 2017年3月25日
575 2194 两个叉易木 female 19.0 本科 ¥716.42 2018年12月19日
657 826 幺小三狸狐 female 19.0 NaN ¥201.61 2017年3月7日
681 2128 hbbzl female 19.0 NaN ¥761.81 2018年9月15日
704 2076 122jy female 19.0 本科 ¥150.96 2018年6月13日
761 873 055ik female 19.0 NaN ¥2236.27 2017年2月19日
801 290 茕花败茕墨 female 19.0 硕士 ¥1414.49 2017年9月18日
828 154 拉丫头聊无 male 19.0 NaN ¥1362.29 2018年9月6日
879 402 123小于 female 19.0 本科 ¥1057.19 2018年7月19日
891 2645 799hs female 19.0 NaN ¥1052.94 2018年10月21日
981 582 8516z female 19.0 NaN ¥2973.64 2017年3月7日
1025 1651 977hg female 19.0 本科 ¥2454.87 2017年1月25日
1052 1007 301爱我 female 19.0 本科 ¥2028.89 2017年7月3日
1226 2779 611bt male 19.0 NaN ¥181.57 2017年12月22日
1232 1917 186ux male 19.0 NaN ¥2166.13 2018年1月9日
1372 2122 186bt female 19.0 NaN ¥342.07 2018年10月21日
1420 1493 山雪尽等我 female 19.0 NaN ¥1212.02 2018年12月1日
1441 1097 7280杨 female 19.0 NaN ¥764.9 2017年3月21日
1459 31 ilsdk female 19.0 NaN ¥1015.74 2017年7月17日
1569 659 620hy female 19.0 NaN ¥1957.23 2018年5月1日
1640 1393 ci黧iv female 19.0 NaN ¥2147.35 2018年9月2日
1652 443 031eh female 19.0 博士 ¥281.09 2018年2月23日
1693 774 ng泽ug female 19.0 NaN ¥1116.14 2018年12月25日
1713 712 549情你 female 19.0 博士 ¥1948.8 2018年12月11日
1721 1325 过云烟气天 female 19.0 NaN ¥1712.08 2017年8月12日
1738 1469 院校花京南 male 19.0 NaN ¥1097.63 2017年10月16日
1762 195 220钺沐 female 19.0 硕士 ¥475.62 2018年3月1日
1769 1440 很难训难很 female 19.0 NaN ¥1633.44 2018年12月9日
1835 1739 家小姐邝邝 female 19.0 NaN ¥1028.28 2018年4月13日
1885 1877 ghhel female 19.0 NaN ¥2282.67 2017年12月24日
1927 1235 opyac female 19.0 NaN ¥933.92 2017年5月11日
1938 1398 菜宫殿菜白 male 19.0 博士 ¥2776.58 2017年1月9日
1959 2374 ang81 male 19.0 NaN ¥2779.59 2017年3月11日
2010 1437 nny阿阿 female 19.0 硕士 ¥474.53 2017年5月3日
2085 2049 123ht female 19.0 本科 ¥133.11 2017年5月27日
2343 2841 白茶僧茶白 male 19.0 硕士 ¥1527.47 2017年2月26日
2413 1352 百89方正 female 19.0 NaN ¥163.97 2017年7月11日
2415 2389 030bt male 19.0 本科 ¥88.62 2017年3月26日
2549 1295 小可爱玖馥 male 19.0 NaN ¥2061.28 2018年2月12日
2654 1856 renhs male 19.0 NaN ¥708.82 2017年9月4日
2963 1770 小婷婷的m NaN 19.0 硕士 ¥471.97 2017年4月25日
## 基于位置的索引——iloc方法,隐式索引 print('索引4~9',df.iloc[4:10,:])
索引4~9 id name gender age edu custom_amt order_date
4 888 sue女少 female 61.0 本科 ¥2027.9 2018年1月21日
5 2387 824bt male 42.0 本科 ¥854.57 2018年7月6日
6 244 angil male 64.0 NaN ¥2661.94 2018年8月23日
7 1155 280_t female 32.0 NaN ¥70.66 2017年1月6日
8 2623 ugvuf male 48.0 NaN ¥2346.97 2017年2月11日
9 1782 王歆允歆王 NaN 60.0 本科 ¥658.3 2017年11月15日
# print('df1中索引为人名,但iloc使用数字',df1.iloc[3:6,[1,3,5]])
df1中索引为人名,但iloc使用数字 gender edu order_date
name
snaen female NaN 2018年5月16日
sue女少 female 本科 2018年1月21日
824bt male 本科 2018年7月6日
# 随机取样
# DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
# 数量,按比例,抽样数量大于原样本为True(存在重复),权重,随机种子(确保每次抽取的样本相同),0行1列
print(df.sample(2))
id name gender age edu custom_amt order_date
517 2616 哔比里哔黑 male 35.0 本科 ¥732.52 2018年2月2日
1222 684 鹉福根鹉鹦 female 40.0 NaN ¥2335.64 2018年6月12日
print(df.sample(frac=0.002))
id name gender age edu custom_amt order_date
2052 903 975丽叶 male 61.0 硕士 ¥2912.87 2018年10月3日
2842 915 子璐璐子胖 male 56.0 NaN ¥178.97 2017年6月10日
580 2968 大爷额滴俺 male NaN NaN ¥2326.83 2018年7月1日
99 321 北等待北台 female 30.0 本科 ¥106.23 2018年11月27日
1579 1652 666神男 male 30.0 NaN ¥1357.24 2018年3月18日
315 2019 爱小娟彭小 female 26.0 本科 ¥2587.95 2018年4月16日
df2 = df.iloc[:5,:] df2 print(df2.shape)
(5, 7)
print(df2.sample(n=8, replace=True)) # 数量大于原数据
id name gender age edu custom_amt order_date
3 1361 snaen female 26.0 NaN ¥2482.22 2018年5月16日
D:ProgramDataAnaconda3libsite-packagespandascoreindexing.py:1596: SettingWithCopyWarning:
0 890 李小胆李l female 43.0 NaN ¥2177.94 2018年12月25日
0 890 李小胆李l female 43.0 NaN ¥2177.94 2018年12月25日
A value is trying to be set on a copy of a slice from a DataFrame.
4 888 sue女少 female 61.0 本科 ¥2027.9 2018年1月21日
Try using .loc[row_indexer,col_indexer] = value instead
2 2785 haoah male 39.0 NaN ¥849.79 2018年5月15日
1 2391 881xt male 52.0 NaN ¥2442.18 2017年5月24日
0 890 李小胆李l female 43.0 NaN ¥2177.94 2018年12月25日
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
3 1361 snaen female 26.0 NaN ¥2482.22 2018年5月16日
w = [0, 0, 0.2, 0.4, 0.4] df2.loc[:,'权重'] = w # 添加一列:权重 print(df2)
id name gender age edu custom_amt order_date 权重
D:ProgramDataAnaconda3libsite-packagespandascoreindexing.py:1745: SettingWithCopyWarning:
0 890 李小胆李l female 43.0 NaN ¥2177.94 2018年12月25日 0.0
A value is trying to be set on a copy of a slice from a DataFrame.
1 2391 881xt male 52.0 NaN ¥2442.18 2017年5月24日 0.0
Try using .loc[row_indexer,col_indexer] = value instead
2 2785 haoah male 39.0 NaN ¥849.79 2018年5月15日 0.2
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
3 1361 snaen female 26.0 NaN ¥2482.22 2018年5月16日 0.4
isetter(ilocs[0], value)
4 888 sue女少 female 61.0 本科 ¥2027.9 2018年1月21日 0.4
print(df2.sample(n=2, weights='权重'))
id name gender age edu custom_amt order_date 权重
3 1361 snaen female 26.0 NaN ¥2482.22 2018年5月16日 0.4
2 2785 haoah male 39.0 NaN ¥849.79 2018年5月15日 0.2
print(df2.sample(n=2, axis=None))
id name gender age edu custom_amt order_date 权重
3 1361 snaen female 26.0 NaN ¥2482.22 2018年5月16日 0.4
2 2785 haoah male 39.0 NaN ¥849.79 2018年5月15日 0.2
print(df2.sample(n=2,random_state=345))
id name gender age edu custom_amt order_date 权重
3 1361 snaen female 26.0 NaN ¥2482.22 2018年5月16日 0.4
2 2785 haoah male 39.0 NaN ¥849.79 2018年5月15日 0.2