pandas DataFrame
DataFrame 二维,Series容器
一、创建DataFrame
# 方法一 pd.DataFrame(data=None, index=None, columns=None) # data: array-like, 数据 # index: array-like, 行索引 axis=0 # columns: array-like, 列索引 axis=1 # 方法二(字典) pd.DataFrame({'name': ['tom', 'alex'], 'age': [24, 34], 'hometown': ['xz', 'bj']}, index=list('ab')) # 字典的key是列索引 pd.DataFrame([{'name': 'tom', 'age': 24, 'hometown': 'xz'}, {'name': 'alex', 'age': 34}, {'name': 'bob', 'hometown': 'wx'}]) # 每个字典是一条行数据 # 没有的数据用NaN表示
二、DataFrame的基础属性
arr1.shape # 行数 列数 arr1.dtypes # 列数据类型 arr1.ndim # 维度 arr1.index # 行索引 arr1.columns # 列索引 arr1.values # 二维ndarry的数组
三、DataFrame整体情况查询
arr1.head(n) # 显示头部几行,默认5行 arr1.tail(n) # 显示尾部数据几行,默认5行 arr1.info() # 相关信息浏览:行数、列数,列索引,列非空值个数,列类型,内存占用 arr1.describe() # 快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值
四、排序
arr1.sort_values(by="列索引", ascending=True) # ascending=True为升序,值为False为降序 # 需要创建一个新的变量
五、索引和切片
1、原始 a、方括号写数组,表示取行,对行进行操作 b、方括号写字符串,表示取列,对列进行操作 2、loc 通过标签获取数据 语法 arr.loc[行标签, 列标签] # 用法和numpy的索引和切片相似(连续,不连续) # 切片的时候,顾尾 例子 arr3.loc['A', 'd'] arr3.loc['A', ['a', 'd']] arr3.loc['A': 'C', ['a', 'd']] 3、iloc 通过位置获取数据 语法 arr.iloc[行位置, 列位置] # 用法和numpy的索引和切片相似(连续,不连续) # 切片的时候,顾头不顾尾 例子 arr3.iloc[0, 2] arr3.iloc[1:3, [2, 4]] 4、布尔索引 a、不符合布尔条件的使用NaN代替 b、与 $ arr3[(arr3 > 5) & (arr3 < 10)] b、或 | arr3[(arr3 < 5) | (arr3 > 10)] # 注意: 不同的条件之间,需要用括号括起来
注意:df[列索引][布尔索引] = 值
设置布尔索引为True的值
六、常用字符串方法
contains # 返回表示各个字符串是否含有指定模式的布尔型数组 len # 计算各个字符串的长度 lower、upper # 转换大小写,相当于各个元素执行x.lower()或x.upper() replace # 用指定字符串替换找到的模式 split # 根据分隔符或正则表达式对字符串进行拆分 例子 arr[列索引].str.len()
七、缺失数据的处理
1、判断数据是否为NaN pd.isnull(数据) pd.isna(数据) pd.notna(数据) pd.notnull(数据) 2、处理方式 a、方式一,填充NaN filna(value=None, inplace=False) # inplace False 需要定义一个变量,接收结果, True不需要,在原地上修改 例子 arr1['age'] = arr1['age'].fillna(arr1['age'].mean()) # 填充平均值 b、方式二,删除NaN(一般不推荐使用) arr1.dropna(axis=0, how="any", inplace=False) # axis 行数据 # any 行数据含有一个NaN 删除, all 行数据全都是NaN 删除 # inplace False 需要定义一个变量,接收结果, True不需要,在原地上修改 例子: arr1 = arr1.dropna(axis=0, ) c、处理0 arr[arr==0] = np.nan 注意:0不是必须要处理的数据
八、pandas常用统计方法
mean() # 求均值 df['age'].mean() meidan() # 中间值 max() # 最大值 min() # 最小值
九、去重
df[columns索引].unique()