Pandas学习笔记
链接:https://www.bilibili.com/video/BV1tA411H7cQ?p=1
官方文档:https://pandas.pydata.org/docs/user_guide/index.html#user-guide
Pandas文件操作
函数 | 说明 |
---|---|
read_csv | 从文件、URL、文件型对象中加载带分隔符的数据,默认分隔符为逗号 |
read_excel | 从Excel XLS或XLSX file读取表格数据 |
read_json | 读取JSON字符串中的数据 |
CSV读取文件
a.csv:
read_csv(file_path or buf,usecols,encoding…):
file_path:文件路径,
header:用作列名的行号。默认为0(第一行),如果没有header行就应该设置为None
index_col:用作行索引的列编号或列名。可以是单个名称/数字或由多个名称、数字组成的列表
usecols:指定读取的列名,
na_values:一组用于替换NA的值
nrows:需要读取的行数
skiprows:需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)
converters:由列号/列名跟函数之间的映射关系组成的字典。如{‘foo’:f}会对foo列的所有值应用函数f
encoding:编码,通常为’utf-8’。
data=pd.read_csv(
'a.csv',
header=0,
index_col=0,
na_values={
'age':0},
nrows=4,
encoding='gb18030'
)
print(data)
# age 语文 数学
# Score
# A 15.0 80 99
# B 16.0 90 95
# C NaN 89 90
# D 14.0 87 89
CSV写入文件
to_csv(file_path or buf,sep,columns,header,index,na_rep,mode…):
file_path:保存文件路径,默认None,
sep:分隔符,默认’,’ ,
columns:是否保留某列数据,默认None,
header:是否保留列名,默认True,
index:是否保留行索引,默认True,
na_rep:指定字符串来代替空值,默认是空字符,
mode:默认’w’,追加’a’
data['总分'] = data.iloc[:, 1:3].sum(axis=1)
mean_age=data.iloc[:,0].mean()
data.to_csv('a.csv',na_rep=mean_age,encoding='gb18030')
Pandas数据清洗
处理缺失数据
- 删除含有空值的行或列:dropna
DataFrame.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
thresh:一行或一列中至少出现了thresh个才删除。
subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)
inplace:是否直接在原数据上进行修改。
- 填充缺失值:fillna
DataFrame.fillna(value=None, method=None, axis=None, limit=None inplace=False)
value:需要用什么值去填充缺失值,不同的列用不同的值填充时可使用字典
axis:确定填充维度,从行开始或是从列开始
method:ffill:用缺失值前面的一个值代替缺失值;backfill/bfill,缺失值后面的一个值代替前面的缺失值。注意这个参数不能与value同时出现
limit:确定填充的个数,如果limit=2,则只填充两个缺失值。
inplace:是否直接在原数据上进行修改。
数据转换
处理重复数据
drop_duplicates()过滤重复行
- 默认判断全部列,可指定按某些列判断
df_obj = pd.DataFrame({
'A': ['a'] * 4 + ['b'] * 4, 'B': np.random.randint(0, 4, 8)})
print(df_obj)
# A B
# 0 a 3
# 1 a 2
# 2 a 3
# 3 a 1
# 4 b 2
# 5 b 0
# 6 b 3
# 7 b 2
df_obj.drop_duplicates('B',inplace=True)
print(df_obj)
# A B
# 0 a 3
# 1 a 2
# 3 a 1
# 5 b 0
利用函数或映射进行数据转换
- map
map()是Series对象的一个函数,DataFrame中没有map(),map()的功能是将一个自定义函数作用于Series对象的每个元素。
DataFrame对象的一行或者一列可以看成一个Series对象,因此也适用map()函数 - apply
apply()函数的功能是将一个自定义函数作用于DataFrame的行或者列 - applymap()函数的功能是将自定义函数作用于DataFrame的所有元素
df = pd.DataFrame({
'key':list('abcd'),'data1': np.arange(4),'data2': np.arange(5, 9)})
print(df)
# key data1 data2
# 0 a 0 5
# 1 b 1 6
# 2 c 2 7
# 3 d 3 8
df['total'] = df[['data1','data2']].apply(lambda x : x.sum(), axis = 1)
print(df)
# key data1 data2 total
# 0 a 0 5 5
# 1 b 1 6 7
# 2 c 2 7 9
# 3 d 3 8 11
替换值
replace根据值的内容进行替换