整理的这些东动为的是让自己加深印象,就像一本字典一样可以随时查阅吧。没别的意思
df.isnull() 输出的是布尔值
df.isnull().sum() 每一列的空值的数量加总 相当于 df.count()
df.isnull().sum().sum() 全部的数据的空值数量
df.notnull() 输出的也是布尔值,,和最上面的那个相反
dropping missing 丢掉缺失值
df.c4[df.c4.notnull()] 选择c4列的非空值 df.c4.dropna() 效果一样 但原数组不改变,只复制一份值
df.dropna(how = 'all') df.dropna(how='all', axis=1) 默认是对行进行操作
df2.dropna(how='any', axis=1)
df.dropna(thresh=5, axis=1) 设定删除的阈值 Na Ns don't count as an item in calculating
Filling in missing data 填充缺失值 空值不再计算内容的范围里面
filled = df.fillna(0) 用0填充所有缺失值
df.fillna(0, limit=2) 填充前面2个
df.c4.fillna(method="ffill") 向前填充, 最后一个为空值
pd.ffill() and pd.bfill() 和前面等价
fill_values = pd.Series([100, 101, 102], index=['a', 'e', 'g'])
df.c4.fillna(fill_values) 用标签填充
df.fillna(df.mean()) 均值填充
s = pd.Series([1, np.nan, np.nan, np.nan, 2])
s.interpolate() 线性插入支 如(2.0 – 1.0)/(5-1) = 0.25
ts.interpolate(method="time") s.interpolate(method="values") 也一样
Handling duplicate data 处理重复的数据
data.duplicated() 返回的是布尔值。是否是重复数据
data.drop_duplicates() 留的是每行的第一个重复值
data.drop_duplicates(take_last=True) 留的是最后一个
data.drop_duplicates(['a', 'b']) 对特定的列筛选
Transforming Data 数据转换
x.map(y) 映射
s.replace(2, 5) 在Series中表示标签为2的值 替换 为5
s.replace({0: 10, 1: 100}) 用字典替换
df.replace({'a': 1, 'b': 8}, 100) 在DataFrame中,表示a中的1,b列中的8 替换为100
s = pd.Series(np.arange(0, 5)) s.apply(lambda v: v * 2)
df.apply(lambda col: col.sum()) 计算每列的和
df.apply(lambda row: row.sum(), axis=1) 同理 行
df['interim'] = df.apply(lambda r: r.a * r.b, axis=1) 新列 并创建值
df['result'] = df.apply(lambda r: r.interim + r.c, axis=1)
df.a = df.a + df.b + df.c 不创建新列,在原列的基础上增加数学操作运算
df.dropna().apply(lambda x: x.sum(), axis=1) 除空值外的行的和
use applymap to format all items of the Data Frame
df.applymap(lambda x: '%.2f' % x) 整个数据都转化为保留2位小数的浮点数 对整体操作
Combining and Reshaping 合并与重组
pd.concat(objs, axis=0,join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False) 所有参数
pd.concat([df1, df2]) 注意索引是源数列的 没有合并
c = pd.concat([df1, df2], keys=['df1', 'df2']) 指定属于哪张表
pd.concat([df1, df2], axis=1) 纵向合并 axis指定轴向
pd.concat([df1, df3], axis=1)
pd.concat([df1, df3], axis=1, join='inner')
Pivoting 视图
加上join参数的属性,如果为’inner’得到的是两表的交集,如果是outer,得到的是两表的并集。In[28]: pieces = {'x': df1,'y': df2,'z': df3}
In[29]: result = pd.concat(pieces) 传入字典增加分组建
df1.append(df2, ignore_index=True)
sensor_readings[sensor_readings['axis'] == 'X'] 只选择一列的某值显示
和透视的功能差不多,不过只是透视的一部分,stack表示把列变为索引,另外一个相反
df = pd.Data Frame({'a': [1, 2]}, index={'one', 'two'})
stacked1 = df.stack()
Grouping and Aggregating Data 这个知道有用,但还没用过过
The split, apply, and combine (SAC) pattern 分,聚 和
grouped = sensors.groupby('sensor') 返回一个DataFrame 不返回值
grouped.size() grouped.count() grouped.get_group('accel')
mcg = sensors.groupby(['sensor', 'axis']) 两列同时操作
print_groups(mcg) mcg.describe() 不同类别的描述
mig_l12.agg(np.mean) 求均值,分组后的
sensors.groupby(['sensor', 'axis'],as_index=False).agg(np.mean)
grouped.transform(lambda x: x + 10)
filled_Na Ns = grouped.transform(lambda x: x.fillna(x.mean()))
f = lambda x: x.Values.count() > 1
df.groupby('Label').filter(f) 必须指定列
f = lambda x: x.Values.isnull().sum() == 0
df.groupby('Label').filter(f) 意思都懂的 就是字面意思
f = lambda x: x.Values.count() > 1
df.groupby('Label').filter(f, dropna=False)
bins = pd.cut(dist, 5) 切分数据
pd.cut(dist, 5, right=False).categories
ranges = [6, 12, 18, 35, 50]
agebins = pd.cut(ages, ranges)
agebins.describe()
qbin = pd.qcut(dist, 5)