数据载入、存储及文件格式 + 数据清洗与准备
后续笔记内容以书本的内容+自身理解的知识进行注释标注记录
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
Series
Series.dropna() # 过滤缺失值 返回非空数据及索引
DataFrame
df.dropna(how='all') # how='all' 删除全为NA的行
# 默认是删除 包含NA的行
df.dropna(axis=1, how='all') # axis=1 删除全为NA的列
df.dropna(thresh=2) # 删除2行NA行
# fillna
df.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、cow
df['animal'] = df.iloc[:,0].map(meat_to_animal) # map(meat_to_animal) 对food列进行 map映射
df
a = pd.Series(['aab', 'ab', 'aa'])
a
a.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 qcut
data = [19, 25, 26, 99]
bins = [18, 25, 35, 60, 100]
cats = pd.cut(data, bins) # 返回Categorical(18, 25] 前开后闭
cats
cats.codes
cats.categories
pd.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() 连接dummies
pd.get_dummies(df) # get_dummies(df) 默认虚拟所有 类型变数,添加前缀(可能出问题)
# get_dummies 结合 cut
values = 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 # 字符串是否在列表中 True
val.index(',') # 定位字符串 ',' 的位置,不存在就抛出异常
val.find(',') # 定位字符串',' 的位置, 不存在返回-1
val.count(',') # 计数 字符串出现的次数
val.replace(',', '') # replace替换
import re
re.split('\s+', text) # 同
regex = re.compile('\s+') # regex re.compile 自行编译 可重复使用 节约CPU
regex.split(text)
regex.findall(text) # 匹配所有符合条件的data
regex.search(text) # 匹配第一个符合条件的dat
regex.match(text) # 匹配起始位置,看是否符合 没有返回None
print(regex.sub('REDACTED', text)) # sub 将匹配项 替换为 REDACTED
# NA值 Series方法
data.str.findall(pattern, flags=re.IGNORECASE) # re.IGNORECASE 正则表达式不区分大小写
好的,第六章知识点记录结束
转载:https://blog.csdn.net/aaywq1/article/details/105176374
查看评论