数据分析实战——05丨Python科学计算:Pandas
- Pandas 可以对数据进行导入、清洗、处理、统计和输出
- 在 NumPy 中数据结构是围绕 ndarray 展开的
- 那么在 Pandas 中的Series 和 DataFrame 这两个核心数据结构,他们分别代表着一维的序列和二维的表结构
- Series 是个定长的字典序列
- 说是定长是因为在存储的时候,相当于两个 ndarray,这也是和字典结构最大的不同
- 因为在字典的结构里,元素的个数是不固定的
- Series有两个基本属性:index 和 values
- 在 Series 结构中,index 默认是 0,1,2,……递增的整数序列,当然我们也可以自己来指定索引,比如 index=[‘a’, ‘b’, ‘c’, ‘d’]
- import pandas as pd
- from pandas import Series, DataFrame
- x1 = Series([1,2,3,4])
- DataFrame 类型数据结构类似数据库表
- 它包括了行索引和列索引,我们可以将 DataFrame 看成是由相同索引的 Series 组成的字典类型
- 数据导入和输出
- Pandas 允许直接从 xlsx,csv 等文件中导入数据,也可以输出到 xlsx, csv 等文件,非常方便。
- import pandas as pd
- from pandas import Series, DataFrame
- score = DataFrame(pd.read_excel('data.xlsx'))
- score.to_excel('data1.xlsx')
- print score
- 需要说明的是,在运行的过程可能会存在缺少 xlrd 和 openpyxl 包的情况,到时候如果缺少了,可以在命令行模式下使用“pip install”命令来进行安装
- 数据清洗
- 1. 删除 DataFrame 中的不必要的列或行
- Pandas 提供了一个便捷的方法 drop() 函数来删除我们不想要的列或行
- 比如我们想把“语文”这列删掉
- df2 = df2.drop(columns=['Chinese'])
- 想把“张飞”这行删掉。
- df2 = df2.drop(index=['ZhangFei'])
- 2. 重命名列名 columns,让列表名更容易识别
- 如果你想对 DataFrame 中的 columns 进行重命名,可以直接使用 rename(columns=new_names, inplace=True) 函数
- 比如我把列名 Chinese 改成 YuWen,English 改成 YingYu。
- df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
- 3. 去重复的值
- 数据采集可能存在重复的行,这时只要使用 drop_duplicates() 就会自动把重复的行去掉。
- df = df.drop_duplicates() # 去除重复行
- 4. 格式问题
- 更改数据格式
- 这是个比较常用的操作,因为很多时候数据格式不规范,我们可以使用 astype 函数来规范数据格式,比如我们把 Chinese 字段的值改成 str 类型,或者 int64 可以这么写:
- df2['Chinese'].astype('str')
- df2['Chinese'].astype(np.int64)
- 数据间的空格
- 有时候我们先把格式转成了 str 类型,是为了方便对数据进行操作,这时想要删除数据间的空格,我们就可以使用 strip 函数:
- # 删除左右两边空格
- df2['Chinese']=df2['Chinese'].map(str.strip)
- # 删除左边空格
- df2['Chinese']=df2['Chinese'].map(str.lstrip)
- # 删除右边空格
- df2['Chinese']=df2['Chinese'].map(str.rstrip)
- 如果数据里有某个特殊的符号,我们想要删除怎么办?同样可以使用 strip 函数,比如 Chinese 字段里有美元符号,我们想把这个删掉,可以这么写:
- df2['Chinese']=df2['Chinese'].str.strip('$')
- 大小写转换
- 大小写是个比较常见的操作,比如人名、城市名等的统一都可能用到大小写的转换,在 Python 里直接使用 upper(), lower(), title() 函数,方法如下:
- # 全部大写
- df2.columns = df2.columns.str.upper()
- # 全部小写
- df2.columns = df2.columns.str.lower()
- # 首字母大写
- df2.columns = df2.columns.str.title()
- 查找空值
- 数据量大的情况下,有些字段存在空值 NaN 的可能,这时就需要使用 Pandas 中的 isnull 函数进行查找
- 如果我们想看下哪个地方存在空值 NaN,可以针对数据表 df 进行 df.isnull()
- 更改数据格式
- 使用 apply 函数对数据进行清洗
- apply 函数是 Pandas 中自由度非常高的函数,使用频率也非常高
- 1. 删除 DataFrame 中的不必要的列或行
- 数据统计
- Pandas 和 NumPy 一样,都有常用的统计函数,如果遇到空值 NaN,会自动排除
- 数据表合并
- 有时候我们需要将多个渠道源的多个数据表进行合并,一个 DataFrame 相当于一个数据库的数据表,那么多个 DataFrame 数据表的合并就相当于多个数据库的表合并
- 两个 DataFrame 数据表的合并使用的是 merge() 函数
- 如何用 SQL 方式打开 Pandas
- 在 Python 里可以直接使用 SQL 语句来操作 pandasql
- pandasql 中的主要函数是 sqldf,它接收两个参数:一个 SQL 查询语句,还有一组环境变量 globals() 或 locals()
- 总结
行者无疆,始于足下
行走,思考,在路上