pandas -- Dataframe 初步使用
Dataframe 的读取
(1) 直接声明
## 先是一个字典的形式
data = {
"keyname1": [ "elem1", "elem2" ],
"keyname2": [ "elem3", "elem4" ]
}
df = pd.DataFrame(data, index = [ <columns> ]) # 别忘了转换
## Output
keyname1 keyname2
0 elem1 elem3
1 elem2 elem4
(2) 读取 Excel 或 csv
os.chdir("$dir")
## Excel
df = pd.read_excel("$filename", encoding = "utf-8" or "GBK")
## csv
df = pd.read_csv("$filename", encoding = "utf-8" or "GBK")
## 写入 Excel
df.to_excel("$Path", encoding = "utf-8", index = False)
# index 很重要!
## 写入 csv
df.to_csv("$Path", encoding = "utf-8", index = False)
(3) 访问基础属性
df.columns
# <class 'pandas.core.indexes.base.Index'> 实际上是列表
df.index
# <class 'pandas.core.indexes.range.RangeIndex'>
数据的选择
(1) 使用中括号
## 注意选中多列时是以 列表 作为选择对象
df[['keyname1', 'keyname2']][左闭:右开] # 可以用步长
# <class 'pandas.core.frame.DataFrame'>
## 选中单列
df['keyname1']
# <class 'pandas.core.series.Series'>
# 单列没有 columns 这个参数
(2) iloc
修改具体单元格数据必备
## 范围左闭右开
iloc[<行范围>, <列范围>]
# <class 'pandas.core.frame.DataFrame'>
iloc[<行>, <列>]
# 单元格具体的属性
(3) loc[左闭:右闭]
这玩意完全按照 索引 来查找,不推荐
Dataframe 的复制
当你要修改 df 的数据时,使用 .copy()
方法
在这之前请先考虑使用 新建 col 是否能代替不必要的复制内存消耗
Dataframe 的条件选择和数据处理
注意: 只能使用 &
和 |
运算符,不能用 and
和 or
合法操作示例:df["keyname1"][3:4][df["keyname2"].isin(list1)]
df['first_five_Letter'] = df['Country (region)'].str.extract(r'(^w{5})') **注意要赋值**
运算符/方法 | 作用 |
---|---|
& |
条件复合,注意加小括号 |
| |
条件复合,注意加小括号 |
== <value> |
筛选出等于给定值的行 |
.isin(<list>) |
筛选出在列表中的行,不用==True |
数据处理 | 简单 |
+ |
字符串的连接或者数字加 |
- |
数字减 |
.isna()/isnull() |
判断是否等于np.nan |
.round(1) |
四舍五入到十分位 |
.apply(<function>, args=<list>) |
最灵活的一集 |
.count(axis=0) |
统计个数 |
.mean() |
这列的平均值 |
.max()/min() |
最大最小值 |
数据处理 | 正则 |
.str |
全部转换为 |
.count(<regex>) |
匹配正则的个数,返回Series,可以再用 .sum() 加总 |
.replace(<regex>, <str>) |
替换 |
.contains(<regex>) |
返回布尔值 |
.findall(<regex>) |
对每个都应用,返回的是Series,与 |
.extract(<regex>) |
提取满足表达式的,返回Series,注意()提取组 |
.match(<regex>) |
对每个字符串都匹配,并返回布尔值Series |
.split(<regex>, expand = True) |
同 py,但是拆分成列了 |
Dataframe 的行列名替换
(1) 临时替换
print(df.rename(columns = {
"keyname1": "1",
"keyname2": 2
}))
(2) 永久替换
df.columns = ["1", 2]
print(type(df.columns[1]))
## Output
<class 'int'> 该是什么是什么
对元素、行号进行排序,重排序
(1) 对行号直接给定索引
## 注意赋值
df = df.reindex([4, 3])
(2) 一键重排序索引
## 注意赋值
## drop 参数用于删除旧索引
df = df.reset_index(drop = True)
(3) 利用索引值排序
## 注意赋值
## 可以用于复原排乱了的值
df = df.sort_index(ascending = True)
(4) sort_values 排序元素
## 注意赋值
df = df.sort_values(by = ["keyname1", "keyname2", ascending = True], axis = 0) # 排序行
df = df.sort_values(by = [1, 3], axis = 1) # 排序列
Dataframe 的删除和拼接
(1) drop
## 直接删行
df = df.drop(1)
df = df.drop(index = [1, 2])
df = df.columns(columns = ["keyname1", "keyname2"])
(2) merge 横向拼接列和 join 按索引拼接
## 如果不要 how 就是内连接
df = pd.merge(df1, df2, left_on = "keyname1", right_on = "keyname2", how = "left")
## 等价于上面的左外连接
df1 = df1.join(df2)
(3) concat 按索引外拼接(默认)
## 无视索引进行拼接,比如 columns 相同时的追加
df = pd.concat([df1, df2], ignore_index = True, axis = 0)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本