Pandas学习笔记(2)

链接: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数据清洗

处理缺失数据

  1. 删除含有空值的行或列: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:是否直接在原数据上进行修改。

  1. 填充缺失值:fillna

DataFrame.fillna(value=None, method=None, axis=None, limit=None inplace=False)
value:需要用什么值去填充缺失值,不同的列用不同的值填充时可使用字典
axis:确定填充维度,从行开始或是从列开始
methodffill:用缺失值前面的一个值代替缺失值;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

利用函数或映射进行数据转换

  1. map
    map()是Series对象的一个函数,DataFrame中没有map(),map()的功能是将一个自定义函数作用于Series对象的每个元素。
    DataFrame对象的一行或者一列可以看成一个Series对象,因此也适用map()函数
  2. apply
    apply()函数的功能是将一个自定义函数作用于DataFrame的行或者列
  3. 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根据值的内容进行替换

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值