摘要: Python 是开源的, 所以有很多开源固有的问题. 如果你是 Python 新手, 很难知道针对特定任务的包哪个是最好的. 你需要有经验的人来告诉你. 今天我要告诉你们的是: 在数据科学中, 有一个软件包是你们绝对需要学习的, 那就是 pandas.
而 pandas 真正有趣的地方是, 很多其他的包也在里面. pandas 是一个核心包, 因此它具有来自其他各种包的特性.
pandas 类似于 Python 中的 Excel: 它使用表 (即 DataFrame) 并对数据进行转换, 但它还能做更多.
如果你已经熟悉 Python, 可以直接进入第三部分
现在让我们开始:
import pandas as pd
pandas 包最基本的功能
1, 读取数据:
- data = pd.read_csv('my_file.csv')
- data=pd.read_csv('my_file.csv',sep=';',encoding='latin-1',nrows=1000, kiprows=[2,5])
sep 变量代表分隔符. 因为 Excel 中的 CSV 分隔符是 ";", 因此需要显示它. 编码设置为 "latin-1" 以读取法语字符. nrows=1000 表示读取前 1000 行. skiprows=[2,5]表示在读取文件时将删除第 2 行和第 5 行
最常用的函数: read_csv, read_excel
还有一些很不错的函数: read_clipboard,read_sql
2, 写入数据
data.to_csv('my_new_file.csv', index=None)
index=None 将简单地按原样写入数据. 如果你不写 index=None, 会得到额外的行.
我通常不使用其他函数, 比如 to_excel,to_json,to_pickle,to_csv, 虽然它们也做得很好, 但是 CSV 是保存表最常用的方法.
3, 检查数据:
- data.shape
- data.describe()
- data.head(3)
.head(3)打印数据的前 3 行,.tail()函数将查看数据的最后一行.
data.loc[8]
打印第 8 行.
data.loc[8, 'column_1']
将第 8 行值打印在 "column_1" 上.
data.loc[range(4,6)]
打印第 4 行到第 6 行.
pandas 的初级功能
1, 逻辑运算
- data[data['column_1']=='french']
- data[(data['column_1']=='french') & (data['year_born']==1990)]
- data[(data['column_1']=='french')&(data['year_born']==1990)&(data['city']=='London')]
如果要根据逻辑操作对数据进行运算, 在使用 & (AND),~ (NOT)和 | (OR)等逻辑操作之前和之后添加 "("&")".
data[data['column_1'].isin(['french', 'english'])]
不要为同一列编写多个 OR, 最好是使用. isin()函数.
2, 基本绘图
多亏了 matplotlib 包, 这个特性才得以实现. 就像我们在介绍中说的, 它可以直接用在 pandas 身上.
data['column_numerical'].plot()
图 1.plot()输出示例
data['column_numerical'].hist()
绘制分布图(直方图)
图 2.hist() 函数输出示例
%matplotlib inline
如果你使用 Jupyter, 在绘图之前, 不要忘记写这一行(在代码中只写一次)
3, 更新数据
data.loc[8, 'column_1'] = 'english'
将'column_1'的第 8 行值替换为'english'
data.loc[data['column_1']=='french', 'column_1'] = 'French'
在一行中更改多行值
3,pandas 的中级功能
现在你可以做一些在 Excel 中很容易做的事情. 让我们来挖掘一些在 Excel 中做不到的神奇事情.
1, 计算功能
data['column_1'].value_counts()
图 3.value_counts()输出示例
2, 对全行, 全列或所有数据的操作
data['column_1'].map(len)
len()函数应用于 "column_1" 的每个元素
map()操作将一个函数应用于列的每个元素.
data['column_1'].map(len).map(lambda x : x/100).plot()
pandas 的另一个特点是进行链式操作. 它可以帮助你在一行代码中执行多个操作, 从而更加简单和高效.
data.apply(sum)
.apply()将函数应用于列.
.applymap()将一个函数应用于表 (DataFrame) 中的所有单元格.
3,tqdm 包
在处理大型数据集时, pandas 可能需要一些时间来运行. map(),.apply(),.applymap()操作. tqdm 是一个非常有用的包, 它可以帮助预测这些操作何时完成.
- from tqdm import tqdm_notebook
- tqdm_notebook().pandas()
用 pandas 设置 tqdm
data['column_1'].progress_map(lambda x : x.count('e'))
将. map()替换为. progress_map(),.apply()和. applymap()也是一样
图 4 这是你在 Jupyter 上看到的的进度条
4, 相关矩阵和散射矩阵
- data.corr()
- data.corr().applymap(lambda x : int(x*100)/100)
图 5.corr() 函数会得到相关矩阵
pd.plotting.scatter_matrix(data, figsize=(12,8))
图 6 散射矩阵的例子, 它绘制同一图表中两列的所有组合
pandas 的高级功能
1ã行列合并
在 pandas 中, 行列合并非常简单.
data.merge(other_data, on=['column_1', 'column_2', 'column_3'])
合并 3 列只需要一行代码
2, 分组
分组一开始并不简单, 但是如果掌握其语法, 你将发现这非常简单.
data.groupby('column_1')['column_2'].apply(sum).reset_index()
按列分组, 选择要在其上操作函数的另一列. reset_index()将数据重新生成 DataFrame(表)
图 7 使用链式操作, 只需一行代码
3, 遍历行
- dictionary = {
- }
- for i,row in data.iterrows():
- dictionary[row['column_1']] = row['column_2']
iterrows()循环两个变量: 行索引和行(上面代码中的 i 和 row).
总体来说, pandas 是一个帮助数据科学家快速阅读和理解数据的工具包, 它也可以说是 Python 如此优秀的原因之一. 我还可以展示更多 pandas 包其他有趣的特点, 但以上所述足以让人理解为什么数据科学家离不开 pandas 包. 总之, pandas 包有以下特点:
1, 简单易用, 隐藏了所有复杂和抽象的计算;
2, 非常直观;
3, 快速.
来源: https://yq.aliyun.com/articles/688777