1.
import pandas as pd import numpy as np df1 = pd.DataFrame(np.arange(12).reshape(3, 4)) df2 = pd.DataFrame(np.arange(20).reshape(4, 5)) print(df1) print(df2) print(df1.add(df2, fill_value=1)) # 加运算 fill_value指定填充值,未对齐的数据将和填充值做运算 print(df1.sub(df2, fill_value=1)) # 减运算 fill_value指定填充值,未对齐的数据将和填充值做运算 print(df1.mul(df2, fill_value=1)) # 乘运算 fill_value指定填充值,未对齐的数据将和填充值做运算 print(df1.div(df2)) # 除运算 fill_value指定填充值,未对齐的数据将和填充值做运算 print(df1.truediv(df2)) # 除运算 fill_value指定填充值,未对齐的数据将和填充值做运算 print(df1.floordiv(df2)) # 向下取整除法 fill_value指定填充值,未对齐的数据将和填充值做运算 print(df1.mod(df2)) # 模运算 fill_value指定填充值,未对齐的数据将和填充值做运算 print(df1.pow(df2)) # 幂运算 fill_value指定填充值,未对齐的数据将和填充值做运算 DataFrame = pd.DataFrame(np.arange(20).reshape(4, 5)) DataFrame = pd.DataFrame([np.random.randn(3), [1., 2., np.nan], [np.nan, 4., np.nan], [1., 2., 3.]]) DataFrame = pd.DataFrame({'key1': ['a', 'b', 'a', 'b', 'a', 'b', 'a', 'a'], 'key2': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'data1': np.random.randn(8), 'data2': np.random.randn(8)}) print(DataFrame) print(DataFrame.head(5)) # 前面几个数据 print(DataFrame.index) # 获取索引 print(DataFrame.values) # 获取数据 print(DataFrame['drugName']) # 切片 DataFrame['G'] = 4 # 增加列 del (DataFrame['G']) # 删除列 print(DataFrame.loc[0:2, 'id':'drugName']) # 第一个参数索引行,第二个参数是列,基于标签名的索引 print(DataFrame.iloc[0:2, 0:2]) # 第一个参数索引行,第二个参数是列,基于索引编号来索引 print(DataFrame.ix[0:2, 'id':'drugName']) # 第一个参数索引行,第二个参数是列,索引和标签都可以 print(np.abs(DataFrame)) # 绝对值 print(DataFrame.apply(lambda x: x.max(), axis=0)) # 使用apply应用行或列数据 axis=0,方向是列 axis=1,方向是行 print(DataFrame.applymap(lambda x: '%.2f' % x)) # 使用applymap应用到每个数据 print(DataFrame.sort_index(axis=1, ascending=True)) # 排序默认使用升序排序,ascending=False 为降序排序 axis=1,行升序 print(DataFrame.sort_values(by=1, ascending=True)) # 根据某个唯一的列名进行排序,by='column name' 如果有其他相同列名则报错. ascending=False 为降序排序 print(DataFrame.isnull()) # 判断是否存在缺失值 True,False print(DataFrame.dropna(axis=1)) # 丢弃缺失数据,根据axis轴方向,丢弃包含NaN的行或列,axis=0,方向是行 axis=1,方向是列 print(DataFrame.fillna(100)) # 填充缺失数据 print(DataFrame.sum(axis=0)) # 求和 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.max(axis=0)) # 最大值 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.min(axis=0)) # 最小值 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.mean(axis=0)) # 平均值 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.count(axis=0)) # 非NA值的个数 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.std(axis=0)) # 方差 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.cumsum(axis=0)) # 累计和 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.mad()) # 平均绝对差 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.cumprod()) # 累计积 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.idxmin()) # 最小值索引 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.idxmax()) # 最大值索引 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.groupby(['key1', 'key2']).mean()) # 根据字段分组 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True print(DataFrame.groupby(['key1', 'key2']).size()) # 每个分组的元素个数 axis=0 按列统计,axis=1按行统计 skipna 排除缺失值, 默认为True for i, j in DataFrame.groupby(['key1', 'key2']): # 迭代对象 print(list(DataFrame.groupby(['key1', 'key2']))) # 转列表 print(dict(list(DataFrame.groupby(['key1', 'key2'])))) # 转字典 print(DataFrame.groupby('key1').agg(lambda df: df.max() - df.min())) # agg(func) func的参数为groupby索引对应的记录 print(DataFrame.groupby('key1').agg(['mean', 'std', 'count'])) # agg(func) func的参数为groupby索引对应的记录 print(DataFrame.describe()) # 详细信息 skipna 排除缺失值, 默认为True count 4.000000 4.000000 4.000000 4.000000 4.000000 该列(行)非NA值的个数 mean 7.500000 8.500000 9.500000 10.500000 11.500000 该列(行)的均值 std 6.454972 6.454972 6.454972 6.454972 6.454972 该列(行)的方差 min 0.000000 1.000000 2.000000 3.000000 4.000000 该列(行)的最小值 25% 3.750000 4.750000 5.750000 6.750000 7.750000 该列(行)的上四分位数 50% 7.500000 8.500000 9.500000 10.500000 11.500000 该列(行)的非NA值的平均数 75% 11.250000 12.250000 13.250000 14.250000 15.250000 该列(行)的下四分位数 max 15.000000 16.000000 17.000000 18.000000 19.000000 该列(行)的最大值
2
df1 = df[df.date.str.contains(r'2017-12-1')] # 查找字符串包含2017-12-1的数据 df[df.A==100] # 找出df中A列值为100的所有数据 df[df.A.isin([100, 200, 300])] # 找出df中A列值为100、200、300的所有数据 df[(df.A==100)&(df.B=='a')] # 找出df中A列值为100且B列值为‘a’的所有数据 df[(df.A==100)|(df.B=='b')] # 找出df中A列值为100或B列值为‘b’的所有数据
3.显示所有的列于行
# 显示所有列 pd.set_option('display.max_columns', None) # 显示所有行 pd.set_option('display.max_rows', None) # 设置value的显示长度为100,默认为50 pd.set_option('max_colwidth', 100)
4.pandas display选项
import pandas as pd pd.set_option('display.max_columns', None) # 显示的最大行数 None:全部显示 pd.set_option('display.max_rows', None) # 显示的最大列数 None:全部显示 pd.set_option('expand_frame_repr', False) # True就是可以换行显示。设置成False的时候不允许换行 pd.set_option('precision', 5) # 显示小数点后的位数 pd.set_option('large_repr', "truncate") # truncate表示截断,info表示查看信息,一般选truncate pd.set_option('max_colwidth', 5) # 列长度 pd.set_option('chop_threshold', 0.5) # 绝对值小于0.5的显示0.0 pd.set_option('colheader_justify', 'left') # 显示居中还是左边 pd.set_option('display.width', 200) # 横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200. import numpy as np np.set_printoptions(threshold=np.inf) # 显示所有数据
导入数据
pd.read_csv(filename):从CSV文件导入数据
pd.read_table(filename):从限定分隔符的文本文件导入数据
pd.read_excel(filename):从Excel文件导入数据
pd.read_sql(query, connection_object):从SQL表/库导入数据
pd.read_json(json_string):从JSON格式的字符串导入数据
pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据
导出数据
df.to_csv(filename):导出数据到CSV文件
df.to_excel(filename):导出数据到Excel文件
df.to_sql(table_name, connection_object):导出数据到SQL表
df.to_json(filename):以Json格式导出数据到文本文件
创建测试对象
pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
pd.Series(my_list):从可迭代对象my_list创建一个Series对象
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):查看Series对象的唯一值和计数
df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数
数据选取
df[col]:根据列名,并以Series的形式返回列
df[[col1, col2]]:以DataFrame形式返回多列
s.iloc[0]:按位置选取数据
s.loc['index_one']:按索引选取数据
df.iloc[0,:]:返回第一行
df.iloc[0,0]:返回第一列的第一个元素
df.values[:,:-1]:返回除了最后一列的其他列的所以数据
df.query('[1, 2] not in c'): 返回c列中不包含1,2的其他数据集
数据清理
df.columns = ['a','b','c']:重命名列名
pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
df.dropna():删除所有包含空值的行
df.dropna(axis=1):删除所有包含空值的列
df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
df.fillna(x):用x替换DataFrame对象中所有的空值
s.astype(float):将Series中的数据类型更改为float类型
s.replace(1,'one'):用‘one’代替所有等于1的值
s.replace([1,3],['one','three']):用'one'代替1,用'three'代替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):批量重命名索引
数据处理:Filter、Sort和GroupBy
df[df[col] > 0.5]:选择col列的值大于0.5的行
df.sort_values(col1):按照列col1排序数据,默认升序排列
df.sort_values(col2, ascending=False):按照列col1降序排列数据
df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据
df.groupby(col):返回一个按列col进行分组的Groupby对象
df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象
df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max
数据合并
df1.append(df2):将df2中的行添加到df1的尾部
df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join
数据统计
df.describe():查看数据值列的汇总统计
df.mean():返回所有列的均值
df.corr():返回列与列之间的相关系数
df.count():返回每一列中的非空值的个数
df.max():返回每一列的最大值
df.min():返回每一列的最小值
df.median():返回每一列的中位数
df.std():返回每一列的标准差