小言_互联网的博客

利用python进行数据分析学习笔记(六+七)

350人阅读  评论(0)

数据载入、存储及文件格式 + 数据清洗与准备

后续笔记内容以书本的内容+自身理解的知识进行注释标注记录

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场