pandas数据基本处理

本文详细介绍了Pandas数据处理,包括DataFrame的列定位、行定位、数据处理方法,如数据类型转换、条件筛选,以及Series的处理和str方法。还讨论了loc、iloc和ix的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas数据格式:

  • Series:一维
  • DataFrame:二维,每一列为一个Series
DataFrame列定位的不同方式:
  • 依据属性名选择:
    data['column']data.column都返回series类型(因为只有一列有意义的值),其中第一列为series的自动编号,第二列为所定位列的数据;

  • 依据下标选择:
    data.iloc[:,0]返回series类型,定位第0列

  • 选取多列:df[["a","b"]],即使用一个列表将需要选取的列名放进去

对DataFrame某一列进行处理:
  • 对该列进行取值:df.column.values:会返回一个array类型的值,该数组保存该列的所有值,用逗号分隔;因为数组是一个容器,所以可以迭代。
  • 获取该列的统计指标:df['column'].describle()
  • 数据类型转换:df['column'] = df['column'].astype(np.datetime64)
  • 对column列使用函数transfer进行处理并放回(更改保存):df['column'] = df['column'].map(lambda x: transfer(x))
  • 基于某一列的数值进行数据筛选(加&和|可以实现多条件筛选):df = df[df['column']==1],筛选是除了普通的>、<、= 还可使用isin。
  • 根据一个dataframe的某一列值对另一个dataframe进行筛选–先将data1作为过滤参考的一列值取出,用list保存,然后用isin方法基于此list进行筛选:df2 = df2[df2["column2"].isin(list(df1["column1"]))]。isin方法返回的是True/False的布尔值,当为True时该列中的该值保存。
DataFrame行定位的不同方式:
  • List item
DataFrame行列定位的应用:
DataFrame内建函数:
  • len(df):返回df的行数(比df.shape[0]快)
DataFrame可调用的方法:
  • df.shape[0/1]:返回df的行数/列数
  • 丢弃:df.drop(['column',axis = 1] ):丢弃column列
  • 清理无效数据:df.dropna():将所有含NaN的行删除;df.dropna(axis=1,thresh=3):将在列的方向上三个为NaN的项删除;df.dropna(how='ALL'):将全部项都是NaN的行删除;drop_duplicates
  • 缺失值填充:df.fillna(0/str)使用0或者str来替换df中的缺失值
  • 替换:df.replace("a",1,inplace=True)将df中的a都替换成1,inplace为True时会替换原来的dataframe;df.replace(dic)即用字典进行替换,字典的key值为dataframe里面的字符,values为将要用来替换的字符。
Series数据基本处理:

因为series是一维的,故不存在行列,统一为series的索引方法

Series类的str自带方法:

当Series的类型是str时,可以用一些str的自带方法对其进行处理,参考链接

  • cat()拼接字符串
>>> Series(['a', 'b', 'c']).str.cat(['A', 'B', 'C'], sep=',')
0 a,A
1 b,B
2 c,C
dtype: object
>>> Series(['a', 'b', 'c']).str.cat(sep=',')
'a,b,c'
>>> Series(['a', 'b']).str.cat([['x', 'y'], ['1', '2']], sep=',')
0 a,x,1
1 b,y,2
dtype: object
  • split()切分字符串
>>> import numpy,pandas;
>>> s = pandas.Series(['a_b_c', 'c_d_e', numpy.nan, 'f_g_h'])
>>> s.str.split('_')
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
>>> s.str.split('_', -1)
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
>>> s.str.split('_', 0)
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
>>> s.str.split('_', 1)
0 [a, b_c]
1 [c, d_e]
2 NaN
3 [f, g_h]
dtype: object
>>> s.str.split('_', 2)
0 [a, b, c]
1 [c, d, e]
2 NaN
3 [f, g, h]
dtype: object
  • get() 获取指定位置的字符串:s.str.get(0)即代表获取每一行的第0个字符串
  • join(“str”) 对每一行的每个字符都用定的字符串拼接起来。
  • contains(“str”) 每一行的字符串是否包含str,包含则返回True,否则返回False
  • replace() 替换:s.str.replace(",","-"):将每一行的,都换成 - 。
  • repeat() 重复:repeat(3)即将每一行已有的字符串重复三遍。
  • pad() 左右补齐:
>>> s.str.pad(10, fillchar="?")
0 ?????a_b_c
1 ?????c_d_e
2 NaN
3 ?????f_g_h
dtype: object
>>>
>>> s.str.pad(10, side="right", fillchar="?")
0 a_b_c?????
1 c_d_e?????
2 NaN
3 f_g_h?????
dtype: object
  • center() 中间补齐:
>>> s.str.center(10, fillchar="?")
0 ??a_b_c???
1 ??c_d_e???
2 NaN
3 ??f_g_h???
dtype: object
  • ljust() 右边补齐,rjust() 左边补齐,用法同上
  • zfill() 左边补0:s.str.zfill(10)
  • slice() 按给定的开始结束位置切割字符串,不包括结束位置
  • count() 计算给定单词出现的次数
  • startswith() 判断是否以给定的字符串开头,endswith() 判断是否以给定的字符串结束:如s.str.startswith(“a”)
  • findall() 查找所有符合正则表达式的字符,以数组形式返回
索引器loc,iloc,ix的区别
  • loc 在index的标签上进行索引,范围包括start和end,即其切片为显式索引(显示索引还包括取值,如df[1])。
  • iloc 在index的位置上进行索引,不包括end,其切片为隐式索引。
  • ix先在index的标签上索引,索引不到就在index的位置上索引(如果index非全整数),不包括end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值