Series

一维同构列表,长度不可改变

创建

  1. # 值列表
  2. srs = pd.Series([1, 3, 5, 7])

数据清洗

  1. # str 方法
  2. srs.str.lower()
  3. srs.str.upper()
  4. srs.str.len()
  5. srs.str.strip()
  6. srs.str.lstrip()
  7. srs.str.rstrip()

DataFrame

带标签的,大小可变的二维异构表格, 大小可改变

创建

  1. # 创建空DF
  2. df = pd.DataFrame(columns=('id','name','grade','class'))
  3. # 从字典创建
  4. data = {
  5. "label":np.linspace(1,4,4),
  6. "data":['zhangsan','李四','111','222']
  7. }
  8. df = pd.DataFrame(data, index=[1,2,3,4]) # 无 index 默认从0开始
  9. # 从numpy数组创建
  10. data = np.random.randn(6,4) # 6行4列
  11. df = pd.DataFrame(data, columns=list('ABCD'))

查看

返回值若为二维,类型一般都为 <class 'pandas.core.frame.DataFrame'>
若为一维, 类型一般都为 <class 'pandas.core.series.Series'>
若为单个标量,类型一般会被尝试转为python基本对象。

  1. # 头尾
  2. df.head(n)
  3. df.tail(n)
  4. # 索引与列
  5. df.index
  6. df.columns
  7. # RangeIndex(start=0, stop=4, step=1)
  8. # Index(['label', 'data'], dtype='object')
  9. # 统计摘要
  10. df.describe()
  11. # 转置
  12. df.T
  13. # 排序
  14. df.sort_index(axis=1, ascending=False)
  15. df.sort_values(by='col_name')

选择

二维方法中取一维结果通常会被降维。
但高维数据当作低维参数结果一般不会被降维,如[[index]]可能得到一个长度1的Series数组,但[index]得到的可能为一个标量。
选择到的标量元素可直接赋值。

按标签

  1. # 获取行 [index]
  2. df.loc[0]
  3. # 获取列
  4. df['col_name']
  5. df.col_name
  6. # 获取行列
  7. df.loc[0:2, ['col_1', 'col_2']]
  8. # 标量
  9. df.loc[1, 'col_name']
  10. df.at[1, 'col_name']

按位置

  1. # 获取行 [index]
  2. df.iloc[2]
  3. # 获取列
  4. df.iloc[:, 2]
  5. # 行列切片
  6. df.iloc[1:2, 1:3]
  7. df.iloc[[1, 3], [2, 4]]
  8. # 获取标量
  9. df.iloc[1, 2]
  10. df.iat[1, 2]

布尔索引

  1. # r: dataframe
  2. # 类似 select where
  3. df[df.col > 0]
  4. # 全部元素筛选
  5. df[df > 2]
  6. # 包含判断
  7. df2[df2['col'].isin(['11', '22'])]

数据清洗

可通过处理dataframeseries数组局部清洗数据,此处略。

NAN处理

  1. # 删除所有含NAN的行
  2. df.dropna(how='any')
  3. # 用默认值替换所有NAN
  4. df.fillna(value=5)
  5. # 获取NAN的布尔掩码
  6. pd.isna(df1)

合并

  1. # 连接
  2. df = pd.concat([df1, df2])

方法

对批量元素执行函数

  1. # 整列元素执行函数
  2. df['new_col'] = df['old_line'].apply(function)
  3. # 添加进度条
  4. from tqdm import tqdm
  5. tqdm.pandas()
  6. df['new_col'] = df['old_line'].progress_apply(function)

参考

官方文档