博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python数据处理的常用操作
阅读量:5175 次
发布时间:2019-06-13

本文共 5928 字,大约阅读时间需要 19 分钟。

python数据处理

1.生成数据

1.导入数据表

df = pd.read_excel('C:/Users/Admin/Desktop/types/output.xlsx') df1 = pd.read_csv('C:/Users/Admin/Desktop/types/output.csv')

2.创建数据表

df = pd.DataFrame(({
"id": [1001, 1002, 1003, 1004, 1005, 1006],                     "date": pd.date_range('20130102', periods=6),                     "city": ['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],                     "age": [23, 44, 54, 32, 34, 32],                     "category": ['100-A', '100-B', '110-A', '110-C', '210-A', '130-F'],                     "price": [1200, np.nan, 2133, 5433, np.nan, 4432]}))

2.数据表检查

1.查看维度(行列)

df.shape

(6, 6)

2.数据表信息

df.info()

3.查看数据格式

# 查看数据表各列格式 print(df.dtypes) # 查看数据表单列格式 print(df['city'].dtype)

4.查看空值

# 检查数据是否为空值 print(df.isnull()) # 检查特定列是否为空值 print(df['price'].isnull())

5.查看唯一值

# 查看city列中的唯一值 print(df['city'].unique())

['Beijing ' 'SH' ' guangzhou ' 'Shenzhen' 'shanghai' 'BEIJING ']

6.查看数据表数据

print(df.values)

7.查看列名称

print(df.columns)

Index(['id', 'date', 'city', 'age', 'category', 'price'], dtype='object')

8.查看前多少行数据

# 不设置值时,默认为5行 print(df.head(3))

9.查看前多少行数据

# 不设置值时,默认为5行 print(df.tail(3))

3.数据表清洗

1.处理空值(删除或填充)

# 删除数据表中含有空值的行 print(df) df.dropna(how='any')
# 使用数据0填空数据表中空值 df.fillna(value=0)
# 使用price均值对NA进行填充 print(df['price'].fillna(df['price'].mean()))

2.清理空格

# 清除city字段中的字符空格 df['city'] = df['city'].map(str.strip)

3.大小写转换

# city列大小写转换 df['city'] = df['city'].str.lower()

4.更改数据格式

# 更改数据格式 df['age'] = df['age'].astype(int)

5.更改列名称

df.rename(columns={
'category': 'category-size'})

6.删除重复值

print(df['city'])
# 删除后出现的重复值(第一次的beijing被保留,最后出现的beijing被删除) print(df['city'].drop_duplicates())
# 设置keep='list'参数后,与之前删除重复值的结果相反,第一位出现的beijing被删除,保留最后一位出现的beijing print(df['city'].drop_duplicates(keep='last'))

7.数值修改及替换

# 数据替换 print(df['city'].replace('sh', 'shanghai'))

4.数据预处理

1.数据表合并

df1 = pd.DataFrame({
'id': [1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008],                     'gender': ['male', 'female', 'male', 'female', 'male', 'female', 'male', 'female'],                     'pay': ['Y', 'N', 'Y', 'Y', 'N', 'Y', 'N', 'Y'],                     'm-point': [10, 12, 20, 40, 40, 40, 30, 20]})
# 数据表匹配合并 # 内连接 df_inner = pd.merge(df, df1, how='inner')
# 左连接 df_left = pd.merge(df, df1, how='left')
# 右连接 df_right = pd.merge(df, df1, how='right')
# 外连接 df_out = pd.merge(df, df1, how='outer')

2.设置索引列

print(df_inner.set_index('id'))

3.排序(按索引,按数值)

# 按特定列的值排序 print(df_inner.sort_values(by=['age']))  # 默认升序,降序ascending=False
# 按索引列排序 print(df_inner.set_index(keys='date'))  # 行索引进行排序

4.数据分组

# 如果price列的值>3000,group列显示high,否则显示为low df_inner['group'] = np.where(df_inner['price'] > 3000, 'high', 'low') # 对复合多个条件的数据进行分组标记 # 对city列等于beijing并且price列大于等于4000的数据标记为1 df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign'] = 1

5.数据分列

# 对category字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为category和size split = pd.DataFrame((x.split('-') for x in df_inner['category']), index=df_inner.index, columns=['category', 'size']) print(split)
# 将完成分列后的数据表与原df_inner数据表进行匹配 df_inner = pd.merge(df_inner, split, right_index=True, left_index=True) print(df_inner)

5.数据提取

1.按标签提取(loc)

# 按索引提取单行的数据 print(df_inner.loc[3])
# 按索引提取区域行数值 print(df_inner.loc[0:5]) # 提取0到5的数据行
# 设置日期为索引 df_inner = df_inner.set_index('date')
# 重设索引 print(df_inner.reset_index()) # 恢复索引
# 提取4日之前的所有数据 print(df_inner[:'2013-01-04']) # 从开始提取到这个日期

2.按位置提取(iloc)

# 使用iloc按位置区域提取数据 print(df_inner.iloc[:3, :2]) # 行列
# 使用iloc按位置单独提取数据 print(df_inner.iloc[[0, 2, 5], [4, 5]])

3.按标签和位置提取(ix)

# 使用ix按索引标签的位置混合提取数据 print(df_inner.ix[:'2013-01-03', :4])

4.按条件提取(区域和条件值)

# 判断city列的值是否为beijing print(df_inner['city'].isin(['beijing']))
# 先判断city列里是否包含beijing和shanghai,然后将复合条件的数据提取出来 print(df_inner.loc[df_inner['city'].isin(['beijing', 'shanghai'])]) category = df_inner['category_x'] print(category)
# 提取前三个字符,并生成数据表 print(pd.DataFrame(category.str[:3]))

6.数据筛选

使用‘与’条件进行筛选

# 筛选大于25岁并且城市为北京的这些列['id', 'city', 'age', 'category_x', 'gender']的值 print(df_inner.loc[ (df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x', 'gender']])

使用‘或’条件筛选

# 筛选大于25岁或城市为北京的这些列['id', 'city', 'age', 'category_x', 'gender']的值,并按照年龄对其进行排序 print(df_inner.loc[ (df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x', 'gender']].sort_values(by='age')) print(df_inner.loc[ (df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id', 'city', 'age', 'category_x', 'gender']].sort_values(by='id').city.count())

使用query函数进行筛选

# 筛选出city列等于beijing或者shanghai的 print(df_inner.query('city == ["beijing","shanghai"]')) print(df_inner.query('city == ["beijing","shanghai"]').price.sum())

7.数据汇总

1.分类汇总

# 对所有列进行计数汇总 print(df_inner.groupby('city').count())
# 按照城市对id字段进行汇总计数 print(df_inner.groupby('city')['id'].count())
# 对两个字段进行汇总计数 print(df_inner.groupby(['city', 'size'])['id'].count())
# 对city字段进行汇总并计算price的合计和均值 print(df_inner.groupby('city')['price'].agg([len, np.sum, np.mean]))

2.数据透视

# 数据透视表 # 设置city为行字段,size为列字段,price为值字段 print(pd.pivot_table(df_inner, index=["city"], values=["price"], columns=["size"], aggfunc=[len, np.sum], fill_value=0, margins=True))

8.数据统计

1.数据采样

# 简单的数据采样(随机抽取3条数据) print(df_inner.sample(n=3))
# 手动设置采样权重 weights = [0, 0, 0, 0, 0.5, 0.5] print(df_inner.sample(n=2, weight=weights))
# sample函数中的参数replace,用于设置采样数是否放回 # 采样后不放回 print(df_inner.sample(n=6, replace=False))
# 采样后放回 print(df_inner.sample(n=6, replace=True))

2.描述统计

# 数据表描述性统计 print(df_inner.describe(),round(2).T)

3.标准差

print(df_inner['price'].std())

4.协方差

# 两个字段间的协方差 print(df_inner['price'].cov(df_inner['m-point']))
# 数据表中所有字段间的协方差 print(df_inner.cov())

5.相关分析

print(df_inner['price'].corr(df_inner['m-point']))
# 数据表相关性分析 print(df_inner.corr())

9.数据输出

1.写入Excel

# 输出到Excel格式 df_inner.to_Excel('excel_to_python.xlsx',sheet_name='bluewhale')

2.写入csv

# 输出到CSV格式 df_inner.to_csv('excel_to_python.csv')

转载于:https://www.cnblogs.com/ly803744/p/10099531.html

你可能感兴趣的文章
MVC实例应用模式
查看>>
欧拉回路和欧拉路径
查看>>
Java 推荐读物与源代码阅读
查看>>
BlogEngine.Net架构与源代码分析系列part1:开篇介绍
查看>>
N皇后问题
查看>>
优化深度神经网络(二)优化算法 SGD Momentum RMSprop Adam
查看>>
2016腾讯全球合作伙伴大会马化腾《给合作伙伴的一封信》
查看>>
Effective JavaScript Item 38 调用父类的构造函数在子类的构造函数
查看>>
Android 开发新方向 Android Wear ——概述
查看>>
固定浮窗的实现代码【转载】
查看>>
C#Windows的HelloWorld
查看>>
Xcode清除缓存、清理多余证书
查看>>
weblogic 优化设置 http://wenku.baidu.com/view/c42e7a5bbe23482fb4da4cf2.html
查看>>
.net 获取 虚拟目录名字
查看>>
BZOJ 入门OJ 2006: [Noip模拟题]七天使的通讯
查看>>
linux下使用g++编译cpp工程
查看>>
JAVA详细运行过程及与平台无关性
查看>>
jsonp跨域总结
查看>>
c#设计模式之观察者模式(Observer Pattern)
查看>>
数论——质数筛法
查看>>