Pandas冷门但很有用的一些函数

1、items()方法

items()方法可以用来遍历数据集当中的每一列,同时返回列名以及每一列当中的内容,通过以元组的形式,示例如下

df = pd.DataFrame({'species': ['bear', 'bear', 'marsupial'],
                   'population': [1864, 22000, 80000]},
                   index=['panda', 'polar', 'koala'])
df

for label, content in df.items():
    print(f'label: {label}')
    print(f'content: {content}', sep='\n')
    print("=" * 50)

 

2、iterrows()方法

对于iterrows()方法而言,其功能则是遍历数据集当中的每一行,返回每一行的索引以及带有列名的每一行的内容,示例如下

for label, content in df.iterrows():
    print(f'label: {label}')
    print(f'content: {content}', sep='\n')
    print("=" * 50)

 

3、assign()方法

assign()方法可以用来在数据集当中添加新的列,示例如下

# 添加一列
df = df.assign(size_1 = lambda x: x.population * 9 / 5 + 32)
df

 

# 添加多列
df = df.assign(size_1 = lambda x: x.population * 9 / 5 + 32, size_2 = lambda x: x.population * 8 / 5 + 10)
df

 

4、eval()方法

eval()方法主要是用来执行用字符串来表示的运算过程的,例如

# 生成一列
df = df.eval("size_3 = size_1 + size_2")
df

 

# 生成多列
df = df.eval('''
size_3 = size_1 + size_2
size_4 = size_1 - size_2
''')
df

 

5、pop()方法

pop()方法主要是用来删除掉数据集中特定的某一列数据

df.pop("size_3")

df

 

6、truncate()方法

truncate()方法主要是根据行索引来筛选指定行的数据的,示例如下

df = pd.DataFrame({'A': ['a', 'b', 'c', 'd', 'e'],
                   'B': ['f', 'g', 'h', 'i', 'j'],
                   'C': ['k', 'l', 'm', 'n', 'o']},
                   index=[1, 2, 3, 4, 5])
df

 

df.truncate(before=2, after=4)

 

参数beforeafter存在于truncate()方法中,目的就是把行索引2之前和行索引4之后的数据排除在外,筛选出剩余的数据。

7、count()方法

count()方法主要是用来计算某一列当中非空值的个数,示例如下

df = pd.DataFrame({"Name": ["John", "Myla", "Lewis", "John", "John"],
                   "Age": [24., np.nan, 25, 33, 26],
                   "Single": [True, True, np.nan, True, False]})
df

df.count()

 

8、add_prefix()方法 / add_suffix()方法

add_prefix()方法和add_suffix()方法分别会给列名以及行索引添加后缀和前缀,对于Series()数据集而言,前缀与后缀是添加在行索引处,而对于DataFrame()数据集而言,前缀与后缀是添加在列索引处,示例如下

s = pd.Series([1, 2, 3, 4])
s

s.add_prefix('row_')

 

s.add_suffix('_row')

 

df = pd.DataFrame({'A': [1, 2, 3, 4], 'B': [3, 4, 5, 6]})
df

 

df.add_prefix("column_")

 

df.add_suffix("_column")

 

9、clip()方法

clip()方法主要是通过设置阈值来改变数据集当中的数值,当数值超过阈值的时候,就做出相应的调整

data = {'col_0': [9, -3, 0, -1, 5], 'col_1': [-2, -7, 6, 8, -5]}
df = pd.DataFrame(data)
df

 

df.clip(lower = -4, upper = 4)

 

参数lowerupper分别代表阈值的上限与下限,数据集当中超过上限与下限的值会被替代。

10、filter()方法

filter()方法是用来筛选出特定范围的数据的,示例如下

df = pd.DataFrame(np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12])),
                  index=['A', 'B', 'C', 'D'],
                  columns=['one', 'two', 'three'])
df

df.filter(items=['one', 'three'])

 

df.filter(regex='e$', axis=1)

 

df.filter(like='B', axis=0)

 

11、first()方法

当数据集当中的行索引是日期的时候,可以通过该方法来筛选前面几行的数据

index_1 = pd.date_range('2021-11-11', periods=5, freq='2D')
ts = pd.DataFrame({'A': [1, 2, 3, 4, 5]}, index=index_1)
ts

 

ts.first('3D')

 

12、isin()方法

isin()方法主要是用来确认数据集当中的数值是否被包含在给定的列表当中

df = pd.DataFrame(np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12])),
                  index=['A', 'B', 'C', 'D'],
                  columns=['one', 'two', 'three'])
df

 

df.isin([3, 5, 12])

 

13、join()方法

当原有的Series中每个元素均为列表,且列表中元素均为字符串时,就可以利用str.join()来将每个列表按照指定的连接符进行连接,主要参数有:

  • 「sep:」 str型,必选,用于设置连接符

它除了可以简化我们常规使用apply()配合'连接符'.join(列表)实现的等价过程之外,还可以在列表中包含非字符型元素时自动跳过此次拼接返回缺失值,譬如下面的例子:

s = pd.Series([
    ['a', 'b', 'c'],
    [1, 'a', 'b'],
    list('pandas')])

s.str.join('-')

 

14、cat()方法

当需要对整个序列进行拼接,或者将多个序列按位置进行元素级拼接时,就可以使用str.cat()方法来加速这个过程,其主要参数有:

  • 「others:」 序列型,可选,用于传入待进行按位置元素级拼接的字符串序列对象

  • 「sep:」 str型,可选,用于设置连接符,默认为''

  • 「na_rep:」 str型,可选,用于设置对缺失值的替换值,默认为None时:

    • others参数未设置时,返回的拼接结果中缺失项自动跳过

    • others参数设置时,两边的序列对应位置上存在缺失值时,拼接结果对应位置返回缺失值

下面是一些简单的例子:

s1 = pd.Series(['a', 'b', None, 'd'])
s2 = list('ABCD')
s1.str.cat()

 

s1.str.cat(sep='/')

 

s1.str.cat(s2)

 

s1.str.cat(s2, sep='-')

 

s1.str.cat(s2, sep='-', na_rep='空')

 

15、startswith()/endswith()方法

当我们需要判断字符型Series中的每个元素是否以某段字符片段开头或结尾时,就可以使用到startswith()/endswith(),它们的参数一致:

  • 「pat:」 str型,用于定义要检查的字符片段

  • 「na:」 任意对象,当对应位置元素为空值时,用于自定义该位置返回判断结果,默认为NaN,会原值返回,通常建议设置为False

下面是一些简单的例子:

s = pd.Series(['aaabb', 'bbccc', pd.NA])
s.str.startswith('a')

 

s.str.endswith('c')

 

s.str.endswith('c', na=False)

 

16、contains()方法

当我们想要判断字符型Series中每个元素,是否包含指定的字符片段或正则模式时,则可以使用到str.contains()方法,其主要参数有:

  • 「pat:」 str型,必选,用于定义要检查的字符模式,当regex=True时表示正则表达式,当regex=False时,表示原始字符串片段

  • 「flags:」 int型,可选,对应re模块中的flags参数,用于配合正则表达式模式,实现更多功能,譬如re.IGNORECASE即代表大小写忽略

  • 「na:」 用于自定义遇到缺失值时返回的对象,通常建议设置为False

  • 「regex:」 bool型,用于设置是否将pat参数视为正则表达式进行解析,默认为True

下面是一些简单的例子:

s = pd.Series(['aab测试ccc', 'bb例子ccc', pd.NA])
s.str.contains('测试')

# 判断是否包含中文
s.str.contains('[\u4e00-\u9fa5]+')

 

s.str.contains('[\u4e00-\u9fa5]+', na=False)

 

17、match()方法

类似前面介绍的startswith(),不同的是,match()支持正则表达式,可以帮助掌握正则表达式的用户拓展匹配能力,其主要参数有:

  • 「pat:」 str型,必选,用于定义要检查的字符模式,当regex=True时表示正则表达式,当regex=False时,表示原始字符串片段

  • 「flags:」 int型,可选,对应re模块中的flags参数,用于配合正则表达式模式,实现更多功能,譬如re.IGNORECASE即代表大小写忽略

  • 「na:」 用于自定义遇到缺失值时返回的对象,通常建议设置为False

下面是一些简单的例子:

s = pd.Series(['https://github.com/Jeremiah-210511/THUCNews-Classification-CNN',
               'https://blog.csdn.net/Jeremiah_?spm=1010.2135.3001.5421',
               'http://xxx.xxx.xxx',
               'ftp://xxx.xxx.xxx'])
s.str.match('https|ftp')

 

18、fullmatch()方法

上面介绍的match()局限性在于只能从开头匹配是否满足指定正则表达式,而从pandas1.1.0版本开始,新增了fullmatch()方法,可以帮助我们传入正则表达式来判断目标字符串是否可以「完全匹配」,其参数同match(),下面是一个简单的例子:

s = pd.Series(['510000', '510100', '510104', '500000', '500101'])
s.str.fullmatch('^51\d+[^0]00')

 

19、split()方法

利用str.split()方法,我们可以基于指定的字符片段或正则模式对原始字符Series进行元素级拆分,主要参数有patn,同上文类似的参数设定,另外还有特殊参数expand来设定对于是否以DataFrame中不同列的形式存储拆分结果,默认为False。下面是一些简单的例子:

s = pd.Series(['2019:10,2020:32,2021:28', '2019:15,2020:20,2021:40'])

#按照逗号,冒号进行分句
s.str.split('[,:]', expand=True)

20、findall()方法

利用findall(),可以按照指定的字符片段/正则模式对字符型Series进行元素级提取,可用的参数有patflags,下面是一些简单的例子:

s = pd.Series(['当地时间2021年11月20日'])

#提取所有数字
s.str.findall('\d+')

#提取指定格式日期
s.str.findall('\d{4}年\d{2}月\d{,2}日')

 

s = pd.Series(['aab, bbc, abcd, aaa. cccdd, add, fdeac.'])

#提取所有长度仅为3的连续字母
s.str.findall(' [a-z]{3}[,\.]|^[a-z]{3}[,\.]')

 

21、get_dummies()方法

在涉及到机器学习特征工程的过程中,我们可以使用到str.get_dummies()方法来对具有固定分隔符的字符串进行哑变量的生成,它只有一个参数sep,用于设置分隔符,暂时不支持正则模式:

s = pd.Series(['类别1/类别2',
               '类别2/类别4/类别5',
               '类别5'])
s.str.get_dummies(sep='/')

22、slice() 方法

当我们想要对字符型Series进行元素级的切片操作时,就可以用到str.slice(),其三个参数依次为startstopstep,分别代表切片的开始下标、结束下标与步长,与Python原生的切片方式一致,下面是一些简单的例子(也可以直接使用类似Python[start:stop:step]):

s = pd.Series(['abc', 'abcd', 'abcde'])
s.str.slice(stop=3)

s.str.slice(start=1, stop=-1)

 

# 等价的写法
s.str[1:-1]

 

# 翻转字符串
s.str[::-1]

 

23、replace()方法

当我们希望对字符型Series进行元素级的字符片段/正则模式替换时,就可以使用到str.replace()方法,其除了常规的patflagsregex等参数外,还有特殊的参数n用于设置每个元素字符串(默认为-1即不限制次数),参数repl用于设置填充的新内容,从开头开始总共替换几次,下面是一些简单的例子:

s = pd.Series(['abc测试de', 'abcdef', 'abc🤣'])
s.str.replace('[\u4e00-\u9fa5]+|🤣', '-', regex=True)

 

s.str.replace('测试', '-', regex=False)

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eureka丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值