Series
一维同构列表,长度不可改变
创建
# 值列表srs = pd.Series([1, 3, 5, 7])
数据清洗
# str 方法srs.str.lower()srs.str.upper()srs.str.len()srs.str.strip()srs.str.lstrip()srs.str.rstrip()
DataFrame
带标签的,大小可变的二维异构表格, 大小可改变
创建
# 创建空DFdf = pd.DataFrame(columns=('id','name','grade','class'))# 从字典创建data = {"label":np.linspace(1,4,4),"data":['zhangsan','李四','111','222']}df = pd.DataFrame(data, index=[1,2,3,4]) # 无 index 默认从0开始# 从numpy数组创建data = np.random.randn(6,4) # 6行4列df = pd.DataFrame(data, columns=list('ABCD'))
查看
返回值若为二维,类型一般都为 <class 'pandas.core.frame.DataFrame'> ;
若为一维, 类型一般都为 <class 'pandas.core.series.Series'> ;
若为单个标量,类型一般会被尝试转为python基本对象。
# 头尾df.head(n)df.tail(n)# 索引与列df.indexdf.columns# RangeIndex(start=0, stop=4, step=1)# Index(['label', 'data'], dtype='object')# 统计摘要df.describe()# 转置df.T# 排序df.sort_index(axis=1, ascending=False)df.sort_values(by='col_name')
选择
二维方法中取一维结果通常会被降维。
但高维数据当作低维参数结果一般不会被降维,如[[index]]可能得到一个长度1的Series数组,但[index]得到的可能为一个标量。
选择到的标量元素可直接赋值。
按标签
# 获取行 [index]df.loc[0]# 获取列df['col_name']df.col_name# 获取行列df.loc[0:2, ['col_1', 'col_2']]# 标量df.loc[1, 'col_name']df.at[1, 'col_name']
按位置
# 获取行 [index]df.iloc[2]# 获取列df.iloc[:, 2]# 行列切片df.iloc[1:2, 1:3]df.iloc[[1, 3], [2, 4]]# 获取标量df.iloc[1, 2]df.iat[1, 2]
布尔索引
# r: dataframe# 类似 select wheredf[df.col > 0]# 全部元素筛选df[df > 2]# 包含判断df2[df2['col'].isin(['11', '22'])]
数据清洗
可通过处理dataframe的series数组局部清洗数据,此处略。
NAN处理
# 删除所有含NAN的行df.dropna(how='any')# 用默认值替换所有NANdf.fillna(value=5)# 获取NAN的布尔掩码pd.isna(df1)
合并
# 连接df = pd.concat([df1, df2])
方法
对批量元素执行函数
# 整列元素执行函数df['new_col'] = df['old_line'].apply(function)# 添加进度条from tqdm import tqdmtqdm.pandas()df['new_col'] = df['old_line'].progress_apply(function)
