数据载入、存储及文件格式 + 数据清洗与准备
后续笔记内容以书本的内容+自身理解的知识进行注释标注记录
pd.read_csv()pd.read_table('', sep=',') #sep=',' 分隔符
pd.read_csv('', header=None) # 默认列名0,1,2``(否则默认第一行)pd.read_csv('', names=['a','b','c','d','message']) # 指定列名pd.read_csv('', names=['a','b','c','d','message'], index_col='message')# 从列中 传入index索引 可index_col=['key1', 'key2']
pd.read_csv('', skiprows=[0, 2, 3]) #skiprows 跳过异常行pd.read_csv('', na_values=['NULL']) # 替换成NA
pd.option.display.max_rows = 10 #文件显示最大行数
df.to_csv('', sep='', na_rep='NULL', columns=['a', 'b', 'c'])# df 数据 sep 分隔符号 na_rep 以NULL 标识缺失值 列['a','b','c']
values = [(1, 2, 3), (1, 2, 3)]list(zip(*values)) # zip 是合并 zip(*values) 拆分 tuple形式# pd.read_excel('', 'sheet1')df.to_excel('')
df.isnull() # 检查缺失值 返回True False
SeriesSeries.dropna() # 过滤缺失值 返回非空数据及索引DataFramedf.dropna(how='all') # how='all' 删除全为NA的行 # 默认是删除 包含NA的行df.dropna(axis=1, how='all') # axis=1 删除全为NA的列df.dropna(thresh=2) # 删除2行NA行
# fillnadf.fillna(0, inplace=True) # NA 填充0 inplace在源数据上执行df.fillna({1: 0.5, 2: 0}) # 字典 不同列填充不同值df.fillna(method='ffill', limit=2) # method=‘ffill’ 向下填充 limit=2 限制2行df.fillna(data.mean())# 填充 平均值
df.duplicated() # 布尔值 检查每一行是否与之前存在重复df.drop_duplicates() # 删除重复值(保留第一次出现的)df.drop_duplicates(['k1', 'k2'], keep='last') #根据['k1','k2']判断重复 keep='last' 保留最后一个(默认是保留第一个)
# Series 的map() 函数、映射关系的字典# 添加一列对应关系df=pd.DataFrame(['bacon', 'corned beef']) meat_to_animal={'bacon': 'pig', 'corned beef': 'cow'} # 字典映射 food 对应的动物 pig、cowdf['animal'] = df.iloc[:,0].map(meat_to_animal) # map(meat_to_animal) 对food列进行 map映射df
a = pd.Series(['aab', 'ab', 'aa'])aa.replace('ab', 0) # Series.replace(['a', 'aa'], 0) 多个值替换# Series.replace({'a': 0, 'aa': 1}) 替换不同的值# Series.str.replace() 是对字符串进行按元素替代
df.rename(index=str.title, columns=str.upper) # rename() 改变 索引标签
# cut qcutdata = [19, 25, 26, 99]bins = [18, 25, 35, 60, 100]cats = pd.cut(data, bins) # 返回Categorical(18, 25] 前开后闭cats
cats.codescats.categoriespd.value_counts(cats) # 计算每个区域的个数
group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior']pd.cut(data,binds, right=False, labels=group_names) # right=False 右开 默认右闭区间, labels 设置标签
pd.cut(data, 4) # 距离平均分成4份pd.qcut(data, 4) # 个数切成4份大小的区间pd.qcut(data, [0, 0.1, 0.5, 0.9, 1.]) # 按分位数来取
data.describe() # 描述性统计数据np.sign(data).head() # 根据数值正负 生成1 -1
# 随机取样df.sample(n=3)# 随机取样df.sample(n=10, replace=True) # replace=True 随机取样可重复取
df = pd.DataFrame(np.random.randn(16).reshape((4,4)))df.sample(n=5, replace=True)
df = pd.DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'b'],'data1': range(6) })dummies = pd.get_dummies(df['key'], prefix='key') # df['key'] 虚拟, prefix 设置变量前缀df_with_dummy = df[['data1']].join(dummies) # df[['data1']] 创建df,['data1']是Series, join() 连接dummiespd.get_dummies(df) # get_dummies(df) 默认虚拟所有 类型变数,添加前缀(可能出问题)
# get_dummies 结合 cutvalues = np.random.randn(10)bins = [0, 0.2, 0.4, 0.6, 0.8, 1]pd.get_dummies(pd.cut(values, bins))
'::'.join(pieces) # join 作为间隔符进行粘合序列
# 定位字符串'guide' in val # 字符串是否在列表中 Trueval.index(',') # 定位字符串 ',' 的位置,不存在就抛出异常 val.find(',') # 定位字符串',' 的位置, 不存在返回-1
val.count(',') # 计数 字符串出现的次数val.replace(',', '') # replace替换
import rere.split('\s+', text)# 同regex = pile('\s+') # regex pile 自行编译 可重复使用 节约CPUregex.split(text)regex.findall(text) # 匹配所有符合条件的dataregex.search(text) # 匹配第一个符合条件的datregex.match(text) # 匹配起始位置,看是否符合 没有返回Noneprint(regex.sub('REDACTED', text)) # sub 将匹配项 替换为 REDACTED# NA值 Series方法data.str.findall(pattern, flags=re.IGNORECASE) # re.IGNORECASE 正则表达式不区分大小写
好的,第六章知识点记录结束