pandas介绍: Pandas 是一个强大的数据处理和分析库,提供了丰富的数据结构和数据操作函数,使得数据的清洗、转换、分析和可视化变得更加简单和高效。
学习文章:https://blog.csdn.net/Strive_For_Future/article/details/126710810
生成数据表
导入数据
1 2 3 4 5 6 7 8
| pd.read_excel('name.xlsv') #导入csv文件 pd.read_csv("name.csv" , sep= ";" , encoding= "utf-8" , nrows=1000, skiprows=[2,5]) # 导入xlsx文件
# sep 分隔符 # encoding 编码模式 # nrows=1000 读取前1000行数据 # skiprows 读取文件时移除第二行和第五行
|
还有 read_clipboard
, read_sql
生成数据表
1
| pd.DataFrame(pd.read_excel('name.xlsv'))
|
查看数据表信息
查看维度
(3, 2)
数据表基本信息(维度,列名,数据格式,所占空间等)
df.info()
查看行索引名(第一列)
1 2
| df.index # 返回series对象 df.index.values # 返回列表
|
[0 1 2]
查看列索引名(第一行)
1 2
| df.columns # 返回series对象 df.columns # 返回列表
|
[‘id’ ‘名字’]
定位表格中的指定元素
1 2 3 4 5 6 7 8
| print(df.at['行标签名', '列标签名']) print(df.iat['行索引号', '列索引号']) print(df.loc['行标签名', '列标签名']) print(df.iloc[行索引数字, 列索引数字]) print(df.loc['行标签名1':'行标签名2', '列标签名1': '列标签名2']) print(df.iloc[行索引数字1:行索引数字2, 列索引数字1:列索引数字2])
|
1 2 3 4 5 6 7 8 9
| data = {'A': [1, 2, 3], 'B': [4, 5, 5], 'C': [6, 7, 8]} df = pd.DataFrame(data)
# 使用at[]访问DataFrame中的单个元素 value = df.iloc[1, 0:2] print(df) print(value)
|
数据的类型
1 2
| df.dtypes df['B'].dtypes
|
A int64
B int64
C int64
dtype: object
int64
查看某一列的值
[‘小明’ ‘小红’ ‘小江’]
查看某一行的值
[3 ‘小江’]
查看是否空值
id 名字
0 False False
1 False False
2 False False
查看某一列的唯一值
[1 2 3]
查看数据表的值
[[1 ‘小明’]
[2 ‘小红’]
[3 ‘小江’]]
查看前n行/后n行的值
id 名字
0 1 小明
1 2 小红
id 名字
1 2 小红
2 3 小江
满足特定文件的行
导出文件
1 2 3 4
| data = pd.read_excel("name.xlsx") df = pd.DataFrame(data) d = data.loc[data['id']==2,['名字']] d.to_excel('1.xlsx')
|
数据表清洗
去除空值
清除空值
1
| df['名字']=df['名字'].map(str.strip)
|
将空值使用0代替
将控制使用均值代替
1
| df['名字'].fillna(df['名字'].mean())
|
大小写转换
1 2
| df['column_name'] = df['column_name'].str.upper() df['column_name'] = df['column_name'].str.lower()
|
更改数据格式
更改列名
1
| df.rename(columns={'改之前的列名': '改之后的列名'})
|
删除重复的值
1 2
| df['id'].drop_duplicates() df['id'].drop_duplicates(keep='last')
|
替换数据
1
| df['名字'].replace('小明','小黑')
|
数据预处理
合并
Pandas 提供了多种函数用于合并数据,常用的函数有以下几种:
- pd.concat(): 将多个数据框按照指定的轴方向进行连接操作。可以进行垂直连接(纵向)或水平连接(横向)。
- df.append(): 将一个数据框追加到另一个数据框的末尾,实现垂直连接操作。(新版本弃用)
- df.join(): 将多个数据框基于索引进行水平连接。
- pd.merge(): 基于指定的列或索引进行数据框的合并操作,类似于关系型数据库中的 JOIN 操作。支持多种连接方式,如内连接、左连接、右连接和外连接等。
merge
使用merge(表1,表2,how=属性)进行合并操作,不同属性值对应不同的合并方式
inner 交集
1
| df_inner = pd.merge(df, df1, how='inner')
|
left/right 左连接/右连接
1
| df_left = pd.merge(df,df1,how='left')
|
1 2 3 4 5 6 7 8 9 10 11 12
| df = pd.DataFrame({ 'id': [1, 2, 3], '名字': ['小明', '小红', '小江'] })
df1 = pd.DataFrame({ 'id': [1, 2, 3], '成绩': [80, 85, 78] })
df_left = pd.merge(df,df1,how='left') df_right = pd.merge(df,df1,how='right')
|
id 名字 成绩
0 1 小明 80
1 2 小红 85
2 3 小江 78
id 名字 成绩
0 1 小明 80
1 2 小红 85
2 3 小江 78
outer 交集
1 2 3 4 5 6 7 8 9 10 11
| df = pd.DataFrame({ 'id': [1, 2, 3], '名字': ['小明', '小红', '小江'] })
df1 = pd.DataFrame({ 'id': [1, 2, 3], '名字': ['小明', '小黑', '小汪'] })
df_outer = pd.merge(df, df1, how='outer')
|
0 1 小明
1 2 小红
2 3 小江
3 2 小黑
4 3 小汪
concat
1 2 3 4 5 6 7
| result = pd.concat(objs, axis=0, join='outer', ignore_index=False)
objs: 一个包含要连接的数据框的序列,可以是列表、元组或字典。 axis: 连接的轴方向,0 表示垂直连接(纵向),1 表示水平连接(横向)。 join: 连接的方式,默认为 'outer',表示按照并集进行连接。可选的取值还包括 'inner',表示按照交集进行连接。 ignore_index: 是否忽略原始索引并生成新的整数索引,默认为 False。
|
1 2 3 4 5 6 7 8 9 10 11 12
| df = pd.DataFrame({ 'id': [1, 2, 3], '名字': ['小明', '小红', '小江'] })
df1 = pd.DataFrame({ 'id': [1, 2, 3], '名字': ['小明', '小黑', '小汪'] })
result = pd.concat([df,df1],axis=0) print(result)
|
id 名字
0 1 小明
1 2 小红
2 3 小江
0 1 小明
1 2 小黑
2 3 小汪
join
1
| result = left.join(right, on='key') #使用key作为索引
|
设置索引列
1
| df_inner.set_index('id')
|
按照特定列的值排序:
1
| df_inner.sort_values(by=['age'])
|
按照索引列排序:
如果prince列的值>3000,group列显示high,否则显示low:
1
| df_inner['group'] = np.where(df_inner['price'] > 3000,'high','low')
|
对复合多个条件的数据进行分组标记
1
| df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign']=1
|
解释: 有一个名为 df_inner 的 DataFrame,其中包含了城市(’city’)和价格(’price’)两列数据。我们想要对满足条件的行添加一个新的列 ‘sign’,并赋值为 1。
对category字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为category和size
1
| pd.DataFrame((x.split('-') for x in df_inner['category']),index=df_inner.index,columns=['category','size'])
|
- x.split(‘-‘) for x in df_inner[‘category’] 是一个生成器表达式,用于对 df_inner[‘category’] 列中的每个元素应用 split(‘-‘) 操作,将其拆分成两部分,并生成一个新的迭代器。
- index=df_inner.index 指定了新 DataFrame 的索引,使用了 df_inner 的索引。
- columns=[‘category’, ‘size’] 指定了新 DataFrame 的列名。
将完成分裂后的数据表和原df_inner数据表进行匹配
1
| df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)
|
- df_inner 是待合并的第一个 DataFrame。
- split 是待合并的第二个 DataFrame。
- right_index=True 表示使用 split DataFrame 的索引作为合并的依据。
- left_index=True 表示使用 df_inner DataFrame 的索引作为合并的依据。