Pandas非常适合许多不同类型的数据:
- 列数据具有异构类型的表格数据,例如在SQL表或Excel电子表格中
- 有序和无序(不一定是固定频率)时间序列数据。
- 具有行和列标签的任意矩阵数据
- 观察/统计数据集的任何其他形式。
二进制安装程序:https://pypi.org/project/pandas
来源存储库:http://github.com/pandas-dev/pandas
问题回馈:https://github.com/pandas-dev/pandas/issues
Pandas基本命令:
导入以下命令以启动:
import pandas as pd import numpy as np
Pandas查看版本:
import pandas as pd print(pd.__version__)
Key and Imports | |
df | pandas DataFrame object |
s | pandas Series object |
密钥和导入 | |
df | Pandas DataFrame对象 |
s | Pandas系列对象 |
创建数据框:
import pandas as pd df = pd.DataFrame({'X':[78,85,96,80,86], 'Y':[84,94,89,83,86],'Z':[86,97,96,72,83]}); print(df)
复制
样本输出:
XYZ 0 78 84 86 1 85 94 97 2 96 89 96 3 80 83 72 4 86 86 83
创建数据系列:
import pandas as pd s = pd.Series([2, 4, 6, 8, 10]) print(s)
样本输出:
0 2 1 4 2 6 3 8 4 10 dtype:int64
创建测试对象
pd.DataFrame(np.random.rand(20,5)) | 5列20行随机浮动 |
pd.Series(my_list) | 从可迭代的my_list创建系列 |
df.index = pd.date_range('1900/1/30', periods=df.shape[0]) | 添加日期索引 |
查看/检查数据
df.head(n) | DataFrame的前n行 |
df.tail(n) | DataFrame的最后n行 |
df.shape | 行数和列数 |
df.info() | 索引,数据类型和内存信息 |
df.describe() | 数值列的摘要统计 |
s.value_counts(dropna=False) | 查看唯一值和计数 |
df.apply(pd.Series.value_counts) | 所有列的唯一值和计数 |
选拔
df [col] | 返回列的标签col为Series |
df [[col1,col2]] | 将列作为新的DataFrame返回 |
s.iloc [0] | 按位置选择 |
s.loc ['index_one'] | 按索引选择 |
df.iloc [0 ,:] | 第一排 |
df.iloc [0,0] | 第一栏的第一元素 |
数据清理
df.columns = ['a','b','c'] | 重命名列 |
pd.isnull() | 检查空值,返回布尔值Arrray |
pd.notnull() | 与pd.isnull()相反 |
df.dropna() | 删除所有包含空值的行 |
df.dropna(axis=1) | 删除所有包含空值的列 |
df.dropna(axis=1,thresh=n) | 删除所有行的少于n个非空值 |
df.fillna(x) | 用x替换所有空值 |
s.fillna(s.mean()) | 用均值替换所有空值 |
s.astype(float) | 将系列的数据类型转换为float |
s.replace(1,'one') | 将所有等于1的值替换为“ 1” |
s.replace([2,3],['two', 'three']) | 将所有2替换为“两个”,将3替换为“三个” |
df.rename(columns=lambda x: x + 1) | 列的重命名 |
df.rename(columns={'old_name': 'new_ name'}) | 选择性重命名 |
df.set_index('column_one') | 更改索引 |
df.rename(index=lambda x: x + 1) | 索引的重命名 |
筛选,排序和分组依据
df[df[col] > 0.6] | 列col大于0.6的行 |
df[(df[col] > 0.6) & (df[col] < 0.8)] | 0.8> col> 0.6的行 |
df.sort_values(col1) | 按col1升序对值进行排序 |
df.sort_values(col2,ascending=False) | 按col2降序对值进行排序。5 |
df.sort_values([col1,col2],ascending=[True,False]) | 按col1升序对值排序,然后按col2降序对值排序 |
df.groupby(col) | 返回一个groupby对象以获取一列中的值 |
df.groupby([col1,col2]) | 从多个列返回groupby对象以获取值 |
df.groupby(col1)[col2] | 返回col2中值的平均值,并按col1中的值分组 |
df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean) | 创建一个数据透视表,该数据透视表按col1分组并计算col2和col3的平均值 |
df.groupby(col1).agg(np.mean) | 在每个列中查找每个唯一col1组的平均值 |
df.apply(np.mean) | 在每列上应用函数np.mean() |
nf.apply(np.max,axis=1) | 在每行上应用函数np.max() |
追加/合并
df1.append(df2) | 将df1中的行添加到df2的末尾(列应相同) |
pd.concat([df1, df2],axis=1) | 将df1中的列添加到df2的末尾(行应相同) |
df1.join(df2,on=col1, how='inner') | SQL样式将df1中的列与df2中的列连接在一起,其中col的行具有相同的值。“方法”可以是“左”,“右”,“外”或“内” |
统计
df.describe() | 数值列的摘要统计 |
df.mean() | 返回所有列的平均值 |
df.corr() | 返回DataFrame中列之间的相关性 |
df.count() | 返回每个DataFrame列中非空值的数量 |
df.max() | 返回每一列的最大值 |
df.min() | 返回每列中的最小值 |
df.median() | 返回每列的中位数 |
df.std() | 返回每列的标准偏差 |
汇入资料
pd.read_csv(filename) | 从CSV文件 |
pd.read_table(filename) | 来自定界文本文件(例如TSV) |
pd.read_excel(filename) | 从Excel文件 |
pd.read_sql(query, connection_object) | 从SQL表/数据库读取 |
pd.read_json(json_string) | 从JSON格式的字符串,URL或文件中读取。 |
pd.read_html(url) | 解析html URL,字符串或文件,并将表提取到数据框列表中 |
pd.read_clipboard() | 获取剪贴板中的内容并将其传递给read_table() |
pd.DataFrame(dict) | 从字典中,列名称的键,列表中数据的值 |
汇出资料
df.to_csv(filename) | 写入CSV文件 |
df.to_excel(filename) | 写入Excel文件 |
df.to_sql(table_name, connection_object) | 写入SQL表 |
df.to_json(filename) | 以JSON格式写入文件 |