Pandas中DataFrame的基础操作

将字典创建为DataFrame

import numpy as np
import pandas as pd

data = {
    "grammer": ["Python", "C", "Java", "GO", np.nan, "SQL", "PHP", "Python"],
    "score": [1, 2, np.nan, 4, 5, 6, 7, 10]
}
df = pd.DataFrame(data = data)
df

运行结果

ecdd5d7414d3475e8054af36b2789a31.png


提取含有字符串"python"的行

df[df['grammer'] == 'Python']

运行结果

6a125c1fdaa144ff82a34cc8a4b7760b.png


修改第二列的列名为'popularity'

修改列名的两种方法

  1. df.columns = [' 列名1 ', ' 列名2 '], 适用于修改所有的列名。
  2. df.rename(columns = {' 原列名 '  : ' '})

df.rename 是 Pandas 库中用于重命名 DataFrame 的方法。这个方法允许你重命名 DataFrame 的行索引或列名。

df.rename 方法的参数index 和 columns:这两个参数分别用于重命名行索引和列名。它们可以接受与 mapper 相同类型的输入,即字典或函数。

df1 = df.rename(columns = {'score':'popularity'}) df1

运行结果

23f0bfa9530c46f59e46bd92dac92103.png


统计grammer列中每种编程语言出现的次数

value_counts 方法的默认行为是返回一个按频率降序排列的 Series,这意味着最常见的值会排在最前面。默认情况下,它会排除空值(NaN),但你可以通过设置 dropna=False 来包括空值。

df['grammer'].value_counts()

运行结果

62b9d34ad95d49cf8c20b011ebd3125b.png


提取popularity列中值大于3的行 

df1[(df1['popularity'] > 3) & (df1['popularity'] < 7)]

这段代码是一个布尔索引表达式,用于筛选 DataFrame df1 中 popularity 列的值在 3 到 7 之间的行。具体来说,这段代码创建了一个布尔掩码(Boolean mask),该掩码可以用于过滤 DataFrame 中满足特定条件的行。

运行结果

632a995d3b684c9181a60052d2f11af1.png


交换两列位置

df2 = df1.reindex( columns = ['popularity','grammer'])
df2

reindex 方法的主要作用是根据新的索引或列标签重新排列 DataFrame。它可以接受多个参数,其中 columns 参数用于指定新的列标签顺序。

运行结果

614ab25b6e024eb8b3ddc83dd7a3f260.png


提取popularity列最大值所在行

df2[df2['popularity'] ==  df2['popularity'].max()]

运行结果

41578999c8f14126877467996d1fadbd.png


删除最后一行数据

df2.drop(7)#默认删除行

删除索引drop和de1方法都能够删DataFrame中的列数据。

区别:

drop是pandas的内置函数,对行和列都可以进行操作,一次可以处理多个项目,效率高。

del是python的内置函数,仅对列进行操作,一次只允许处理一个


统计grammer列每个字符串的长度

df2['grammer_length'] = df2['grammer'].apply(lambda x: len(str(x)) if pd.notnull(x) else 0)
df2

这里我们调用了 apply 方法,这个方法允许我们对列中的每个元素应用一个函数。在这个例子中,我们传递了一个匿名函数(lambda 函数)作为参数。这个 lambda 函数的作用是:如果元素 x 不是空值(通过 pd.notnull(x) 检查),则将其转换为字符串并计算其长度;如果元素 x 是空值,则返回 0。

函数映射-apply

对DataFrame的apply操作:

默认axis=1对每行row执行指定函数;

当axis=0时,对每列columns执行指定函数;传入指定函数的默认形式均为Series;对每个Series执行结果后,会将结果整合返回;DataFrame和Series的apply一样能接收复杂函数。

运行结果

e2132ab0368447288f6452f04ac750d2.png


loc与iloc

loc是location的意思,逗号前面为行,逗号后面为列。 

iloc中i的意思是指integer所以它只接受整数索引。

# 创建一个简单的 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6]}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
df
#运行结果
    A	B
a	1	4
b	2	5
c	3	6
# 使用 loc 选择单行
row_b = df.loc['b']
row_b
#运行结果
A    2
B    5
Name: b, dtype: int64
---------------------------------
# 使用 loc 选择多行
rows_ac = df.loc[['a', 'c']]
rows_ac
#运行结果

    A	B
a	1	4
c	3	6
--------------------------------
# 使用 loc 选择行和列
cell_b_A = df.loc['b', 'A']
cell_b_A
#运行结果
2
---------------------------------
# 使用 loc 选择多行和多列
subset = df.loc[['a', 'b'], ['A', 'B']]
subset
#运行结果
    A	B
a	1	4
b	2	5

# 使用 iloc 选择单行
row_1 = df.iloc[1]
row_1
#运行结果
A    2
B    5
Name: b, dtype: int64
-----------------------------
# 使用 iloc 选择多行
rows_02 = df.iloc[[0, 2]]
rows_02
#运行结果
    A	B
a	1	4
c	3	6
-----------------------------
# 使用 iloc 选择行和列
cell_1_0 = df.iloc[1, 0]
cell_1_0
#运行结果
2
------------------------------
# 使用 iloc 选择多行和多列
subset = df.iloc[[0, 1], [0, 1]]
subset
#运行结果
	A	B
a	1	4
b	2	5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值