1.生成数据
2.数据表检查
3.数据表清洗
4.数据预处理
5.数据提取
6.数据筛选
7.数据汇总
8.数据统计
9.数据输出
1.生成数据
1.导入数据表
1df = pd.read_excel('C:/Users/Admin/Desktop/types/output.xlsx')
2df1 = pd.read_csv('C:/Users/Admin/Desktop/types/output.csv')
2.创建数据表
1df = pd.DataFrame(({"id": [1001, 1002, 1003, 1004, 1005, 1006],
2 "date": pd.date_range('20130102', periods=6),
3 "city": ['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
4 "age": [23, 44, 54, 32, 34, 32],
5 "category": ['100-A', '100-B', '110-A', '110-C', '210-A', '130-F'],
6 "price": [1200, np.nan, 2133, 5433, np.nan, 4432]}))
返回结果:
2.数据表检查
1.查看维度(行列)
1df.shape
(6, 6)
2.数据表信息
1df.info()
返回结果:
3.查看数据格式
1# 查看数据表各列格式
2print(df.dtypes)
3# 查看数据表单列格式
4print(df['city'].dtype)
返回结果:
4.查看空值
1# 检查数据是否为空值
2print(df.isnull())
3# 检查特定列是否为空值
4print(df['price'].isnull())
返回结果:
5.查看唯一值
1# 查看city列中的唯一值
2print(df['city'].unique())
['Beijing ' 'SH' ' guangzhou ' 'Shenzhen' 'shanghai' 'BEIJING ']
6.查看数据表数据
1print(df.values)
返回结果:
7.查看列名称
1print(df.columns)
Index(['id', 'date', 'city', 'age', 'category', 'price'], dtype='object')
8.查看前多少行数据
1# 不设置值时,默认为5行
2print(df.head(3))
返回结果:
9.查看后多少行数据
1# 不设置值时,默认为5行
2print(df.tail(3))
返回结果:
3.数据表清洗
1.处理空值(删除或填充)
1# 删除数据表中含有空值的行
2df.dropna(how='any')
返回结果:
1# 使用数据0填空数据表中空值
2df.fillna(value=0)
返回结果:
1# 使用price均值对NA进行填充
2print(df['price'].fillna(df['price'].mean()))
返回结果:
2.清理空格
1# 清除city字段中的字符空格
2df['city'] = df['city'].map(str.strip)
3.大小写转换
1# city列大小写转换
2df['city'] = df['city'].str.lower()
返回结果:
4.更改数据格式
1# 更改数据格式
2df['age'] = df['age'].astype(int)
5.更改列名称
1df.rename(columns={'category': 'category-size'})
返回结果:
6.删除重复值
1print(df['city'])
返回结果:
1# 删除后出现的重复值(第一次的beijing被保留,最后出现的beijing被删除)
2print(df['city'].drop_duplicates())
返回结果:
1# 设置keep='list'参数后,与之前删除重复值的结果相反,第一位出现的beijing被删除,保留最后一位出现的beijing
2print(df['city'].drop_duplicates(keep='last'))
返回结果:
7.数值修改及替换
1# 数据替换
2print(df['city'].replace('sh', 'shanghai'))
返回结果:
4.数据预处理
1.数据表合并
1df1 = pd.DataFrame({'id': [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008],
2 'gender': ['male', 'female', 'male', 'female', 'male', 'female', 'male', 'female'],
3 'pay': ['Y', 'N', 'Y', 'Y', 'N', 'Y', 'N', 'Y'],
4 'm-point': [10, 12, 20, 40, 40, 40, 30, 20]})
返回结果:
1# 数据表匹配合并
2# 内连接
3df_inner = pd.merge(df, df1, how='inner')
返回结果:
1# 左连接
2df_left = pd.merge(df, df1, how='left')
返回结果:
1# 右连接
2df_right = pd.merge(df, df1, how='right')
返回结果:
1# 外连接
2df_out = pd.merge(df, df1, how='outer')
返回结果:
2.设置索引列
1print(df_inner.set_index('id'))
返回结果:
3.排序(按索引,按数值)
1# 按特定列的值排序
2print(df_inner.sort_values(by=['age'])) # 默认升序,降序ascending=False
返回结果:
1# 按索引列排序
2print(df_inner.set_index(keys='date')) # 行索引进行排序
返回结果:
4.数据分组
1# 如果price列的值>3000,group列显示high,否则显示为low
2df_inner['group'] = np.where(df_inner['price'] > 3000, 'high', 'low')
3
4# 对复合多个条件的数据进行分组标记
5# 对city列等于beijing并且price列大于等于4000的数据标记为1
6df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign'] = 1
返回结果:
5.数据分列
1# 对category字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为category和size
2split = pd.DataFrame((x.split('-') for x in df_inner['category']), index=df_inner.index, columns=['category', 'size'])
3print(split)
返回结果:
1# 将完成分列后的数据表与原df_inner数据表进行匹配
2df_inner = pd.merge(df_inner, split, right_index=True, left_index=True)
3print(df_inner)
返回结果:
5.数据提取
1.按标签提取(loc)
1# 按索引提取单行的数据
2print(df_inner.loc[3])
返回结果:
1# 按索引提取区域行数值
2print(df_inner.loc[0:5]) # 提取0到5的数据行
返回结果:
1# 设置日期为索引
2df_inner = df_inner.set_index('date')
返回结果:
1# 重设索引
2print(df_inner.reset_index()) # 恢复索引
返回结果:
1# 提取4日之前的所有数据
2print(df_inner[:'2013-01-04']) # 从开始提取到这个日期
返回结果:
2.按位置提取(iloc)
1# 使用iloc按位置区域提取数据
2print(df_inner.iloc[:3, :2]) # 行列
返回结果:
1# 使用iloc按位置单独提取数据
2print(df_inner.iloc[[0, 2, 5], [4, 5]])
返回结果:
3.按标签和位置提取(ix)
1# 使用ix按索引标签的位置混合提取数据
2print(df_inner.ix[:'2013-01-03', :4])
返回结果:
4.按条件提取(区域和条件值)
1# 判断city列的值是否为beijing
2print(df_inner['city'].isin(['beijing']))
返回结果:
1# 先判断city列里是否包含beijing和shanghai,然后将复合条件的数据提取出来
2print(df_inner.loc[df_inner['city'].isin(['beijing', 'shanghai'])])
3category = df_inner['category_x']
4print(category)
返回结果:
1# 提取前三个字符,并生成数据表
2print(pd.DataFrame(category.str[:3]))
返回结果:
6.数据筛选
使用‘与’条件进行筛选
1# 筛选大于25岁并且城市为北京的这些列['id', 'city', 'age', 'category_x', 'gender']的值
2print(df_inner.loc[
3(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x', 'gender']])
返回结果:
使用‘或’条件筛选
1# 筛选大于25岁或城市为北京的这些列['id', 'city', 'age', 'category_x', 'gender']的值,并按照年龄对其进行排序
2print(df_inner.loc[
3(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x',
4'gender']].sort_values(by='age'))
5print(df_inner.loc[
6(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x',
7'gender']].sort_values(by='id').city.count())
返回结果:
6
使用query函数进行筛选
1# 筛选出city列等于beijing或者shanghai的
2print(df_inner.query('city == ["beijing","shanghai"]'))
3print(df_inner.query('city == ["beijing","shanghai"]').price.sum())
返回结果:
5632.0
7.数据汇总
1.分类汇总
1# 对所有列进行计数汇总
2print(df_inner.groupby('city').count())
返回结果:
1# 按照城市对id字段进行汇总计数
2print(df_inner.groupby('city')['id'].count())
返回结果:
1# 对两个字段进行汇总计数
2print(df_inner.groupby(['city', 'size'])['id'].count())
返回结果:
1# 对city字段进行汇总并计算price的合计和均值
2print(df_inner.groupby('city')['price'].agg([len, np.sum, np.mean]))
返回结果:
2.数据透视
1# 数据透视表
2# 设置city为行字段,size为列字段,price为值字段
3print(pd.pivot_table(df_inner, index=["city"], values=["price"], columns=["size"],
4aggfunc=[len, np.sum], fill_value=0, margins=True))
返回结果:
8.数据统计
1.数据采样
1# 简单的数据采样(随机抽取3条数据)
2print(df_inner.sample(n=3))
返回结果:
1# sample函数中的参数replace,用于设置采样数是否放回
2# 采样后不放回
3print(df_inner.sample(n=6, replace=False))
返回结果:
1# 采样后放回
2print(df_inner.sample(n=6, replace=True))
返回结果:
2.描述统计
1# 数据表描述性统计
2print(df_inner.describe())
返回结果:
3.标准差
1print(df_inner['price'].std())
1966.6385026231944
4.协方差
1# 两个字段间的协方差
2print(df_inner['price'].cov(df_inner['m-point']))
28771.666666666664
1# 数据表中所有字段间的协方差
2print(df_inner.cov())
返回结果:
5.相关分析
1print(df_inner['price'].corr(df_inner['m-point']))
0.9753247017958027
1# 数据表相关性分析
2print(df_inner.corr())
返回结果:
9.数据输出
1.写入Excel
1# 输出到Excel格式
2df_inner.to_Excel('excel_to_python.xlsx',sheet_name='bluewhale')
2.写入csv