数据探索及数据处理&文本数据的处理(一)

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(存在重复),权重,随机种子(确保每次抽取的样本相同),01
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

part2文本数据的处理

原文地址:https://www.cnblogs.com/Cookie-Jing/p/14837723.html