数据分析处理库Pandas常用方法汇总

发布于:2025-04-22 ⋅ 阅读:(8) ⋅ 点赞:(0)

目录

一、基础操作

1.1 创建df对象

1.1.1 读入表格数据

1.1.2 手动创建df

1.2 .info()

1.3 df.index

1.4 df.columns

1.5 df.dtypes

1.6 df.values

1.7 .set_index()

 1.8 df['xxx']

1.9 .describe()

1.10 .isin()

1.12 .where()

1.13 .query()

1.14 Series类型运算

二、Pandas索引结构

2.1 选择多列 

2.2 loc / iloc

 2.3 自定义索引

 2.4 bool索引

2.5 制定多列索引 

三、数值运算操作

3.1 .sum()

3.2 .mean()

3.3 .min() / .max()

3.4 .median()

3.5 二元统计

3.5.1 df.cov()

3.5.2 df.corr()

3.5.3 .value_counts()

三、对象的增删改查

3.1 Series结构的增删改查

3.1.1 查操作

3.1.2 改操作

3.1.3 增操作

3.1.4 删操作

3.2 DataFrame结构的增删改查

3.2.1 查操作

3.2.2 改操作

3.2.3 增操作

3.2.4 删操作

四、合并操作

4.1 .merge()

4.2 多索引合并

使用on参数 

使用how参数

4.3 join

五、数据透视表

5.1 .pivot()

5.2 .pivot_table()

六、 时间操作

6.1 创建时间序列

6.1.1. pd.to_datetime()

6.1.2. pd.date_range()

6.2 时间戳与时间区间

6.2.1. Timestamp

6.2.2. Timedelta

6.3 时间的运算与筛选

6.3.1. 时间加减

6.3.2. 筛选特定时间段

6.4 设置索引并重采样

6.4.1. 设置时间索引

6.4.2. 取时间索引中的某个数值

6.4.3. 重采样 resample()

6.5 时间格式的处理

6.5.1. 提取时间的各部分

6.5.2. 格式化输出

6.6 常见时间函数总结

七、常用操作

7.1 查看数据结构与基本信息

7.1.1 df.head() / df.tail()

7.1.2 df.shape / df.columns / df.index

7.1.3 df.info() / df.describe()

7.2 数据选择与过滤

7.2.1 选择列

7.2.2 选择行

7.2.3 多重条件

6.3 数据修改与添加

7.3.1 新增列

7.3.2 修改数据

7.3.3 删除列/行

7.4 缺失值处理

7.4.1 检查缺失值

7.4.2 删除缺失值

7.4.3 填充缺失值

7.5. 分组与聚合

7.5.1 分组统计

单分组和多重分组

改变索引 

传函数名的自定义分组

多索引时指定某一个索引分组

7.5.2 拆分范围

7.5.3 一列多算

7.6. 排序与去重

7.6.1 排序

7.6.2 去重

7..7 数据合并与连接

7.7.1 拼接 concat

7.7.2 合并 merge

7.8 常见函数速查表

八、字符串操作

8.1 字符串小写/大写/首字母大写

8.2 去除空格、换行等

8.3 查找与匹配字符串

8.3.1 包含判断

8.3.2 匹配字符串开头/结尾

8.4 替换、分割与拼接

8.4.1 替换

8.4.2 字符串分割

.str.split()

8.4.3 拼接字符串

8.5 提取子串与正则提取

8.5.1 提取固定位置子串

8.5.2 正则提取

8.6 字符串长度统计

8.7 .get_dummies()

8.8 常用字符串函数速查表

一、基础操作

  • Series

    • 一维数据结构,类似于一个带索引的数组。

    • 每个元素都有一个对应的索引值,索引是唯一的。

    • 通常用于表示单列数据。

    • 通过一个列表、数组或字典创建。

  • DataFrame

    • 二维数据结构,类似于一个表格,由行和列组成。

    • 每列可以有不同的数据类型(如整数、浮点数、字符串等)。

    • 每行和每列都有索引,行索引称为 index,列索引称为 columns

    • 通常用于表示多列数据。

    • 通过字典、列表的列表、或从文件(如 CSV、Excel)中读取创建。

1.1 创建df对象

1.1.1 读入表格数据

df = pd.read_csv('./data/titanic.csv')
df.head() #可以读前5行数据

1.1.2 手动创建df

data = {'country':['aaa','bbb','ccc'],
       'population':[10,12,14]}
df_data = pd.DataFrame(data)

1.2 .info()

返回当前的信息

df.info()

输出:<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

1.3 df.index

返回索引对象

RangeIndex(start=0, stop=891, step=1)

1.4 df.columns

返回 DataFrame 的列名

Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

1.5 df.dtypes

返回 DataFrame 中每列的数据类型

PassengerId      int64
Survived         int64
Pclass           int64
Name            object
Sex             object
Age            float64
SibSp            int64
Parch            int64
Ticket          object
Fare           float64
Cabin           object
Embarked        object
dtype: object

1.6 df.values

返回 DataFrame 中的数据部分,以二维数组(NumPy 数组)的形式。

array([[1, 0, 3, ..., 7.25, nan, 'S'],
       [2, 1, 1, ..., 71.2833, 'C85', 'C'],
       [3, 1, 3, ..., 7.925, nan, 'S'],
       ...,
       [889, 0, 3, ..., 23.45, nan, 'S'],
       [890, 1, 1, ..., 30.0, 'C148', 'C'],
       [891, 0, 3, ..., 7.75, nan, 'Q']], dtype=object)

1.7 .set_index()

自己指定索引

df = df.set_index('Name')

 1.8 df['xxx']

xxx表示列名,返回Series类型

age = df['Age']

1.9 .describe()

可以得到数据的基本统计特性

df.describe()

 

1.10 .isin()

判断元素是否在给定内容中

s.isin([1,3,4])

1.12 .where()

保留满足条件的数据,替换不满足条件的数据

df.where(df < 0)

df.where(df < 0,999) #将大于0的数全部替换为999

 

1.13 .query()

用于通过字符串表达式对 DataFrame 进行条件筛选 

df.query('(a<b) & (b<c)')

1.14 Series类型运算

.mean() / .max() / .min(),广播+-*%

age = age + 10
age.mean()
age.max()
age.min()

二、Pandas索引结构

2.1 选择多列 

df[['Age','Fare']]

2.2 loc / iloc

  • loc 用label来去定位
  • iloc 用position来去定位
df.iloc[0:5]

df.iloc[0:2]

 2.3 自定义索引

df = df.set_index('Name')
df.loc['Heikkinen, Miss. Laina']

也支持切片操作

df.loc['Heikkinen, Miss. Laina':'Allen, Mr. William Henry']

 2.4 bool索引

df[df['Fare'] > 40][0:5]

 下边两种写法相同

df.loc[df['Sex'] == 'male'][['Fare','Age']]
df.loc[df['Sex'] == 'male',['Fare','Age']]

2.5 制定多列索引 

s2 = pd.Series(np.arange(6),index = pd.MultiIndex.from_product([[0,1],['a','b','c']]))

三、数值运算操作

创建DataFrame

df = pd.DataFrame([[1,2,3],[4,5,6]],index = ['a','b'],columns = ['A','B','C'])

3.1 .sum()

默认axis=0

3.2 .mean()

默认axis=0

3.3 .min() / .max()

默认axis=0

3.4 .median()

默认axis=0

3.5 二元统计

3.5.1 df.cov()

计算 DataFrame 中各列之间的协方差矩阵。

df.cov()

3.5.2 df.corr()

计算 DataFrame 中各列之间的相关系数矩阵。

df.corr()

3.5.3 .value_counts()

统计元组数量

df['Age'].value_counts()

df['Age'].value_counts(ascending = True)

三、对象的增删改查

3.1 Series结构的增删改查

data = [10,11,12]
index = ['a','b','c']
s = pd.Series(data = data,index = index)

 

3.1.1 查操作

s[0]  --> 10
s[0:2]
mask = [True,False,True]
s[mask]
s.loc['b'] --> 11
s.iloc[1] --> 11

3.1.2 改操作

s1['a'] = 100
s1.replace(to_replace = 100,value = 101,inplace = False)

inplace表示是否要在s1上修改

修改index

s1.index = ['a','b','d']
s1.rename(index = {'a':'A'},inplace = True)

3.1.3 增操作

data = [100,110]
index = ['h','k']
s2 = pd.Series(data = data,index = index)

输出:
h    100
k    110
dtype: int64

.concat([xx,xx]) 

s3 = pd.concat([s1,s2])

输出:
A    101
b     11
c     12
h    100
k    110
dtype: int64

pd.concat([s1,s2],ignore_index = True)

输出:
0    101
1     11
2     12
3    100
4    110
dtype: int64

 直接新增新索引

s3['j'] = 500

输出:
A    101
b     11
c     12
h    100
k    110
j    500
dtype: int64

3.1.4 删操作

del s1['A']
s1.drop(['b','d'],inplace = True)

3.2 DataFrame结构的增删改查

data = [[1,2,3],[4,5,6]]
index = ['a','b']
columns = ['A','B','C']

df = pd.DataFrame(data=data,index=index,columns = columns)

3.2.1 查操作

df['A']
输出:
a    1
b    4
Name: A, dtype: int64
df.iloc[0]
df.loc['a']

3.2.2 改操作

df.loc['a','A'] --> 1
df.loc['a']['A'] = 150

3.2.3 增操作

df.loc['c'] = [1,2,3]

df3 = pd.concat([df,df2],axis = 0)

df2['Tang'] = [10,11]

3.2.4 删操作

df5.drop(['j'],axis=0,inplace = True) --> 去除1行
df5.drop(['A','B','C'], axis = 1,inplace = True) --> 去除多列
del df5['Tang'] --> 去除1列

四、合并操作

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'A': ['A0', 'A1', 'A2', 'A3'], 
                    'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
                    'C': ['C0', 'C1', 'C2', 'C3'], 
                    'D': ['D0', 'D1', 'D2', 'D3']})

4.1 .merge()

res = pd.merge(left, right)

4.2 多索引合并

left = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],
                     'key2': ['K0', 'K1', 'K2', 'K3'],
                    'A': ['A0', 'A1', 'A2', 'A3'], 
                    'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K2', 'K3'],
                      'key2': ['K0', 'K1', 'K2', 'K4'],
                    'C': ['C0', 'C1', 'C2', 'C3'], 
                    'D': ['D0', 'D1', 'D2', 'D3']})

使用on参数 

res = pd.merge(left,right,on='key1')

res = pd.merge(left, right, on = ['key1', 'key2'])

使用how参数

outer为并集

res = pd.merge(left, right, on = ['key1', 'key2'], how = 'outer', indicator = True)

left按照左合并,right按照右合并

res = pd.merge(left, right, how = 'left')
res = pd.merge(left, right, how = 'right')

4.3 join

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3'],
                    'key': ['K0', 'K1', 'K0', 'K1']})
right = pd.DataFrame({'C': ['C0', 'C1'],
                       'D': ['D0', 'D1']},
                       index=['K0', 'K1'])
result = left.join(right, on='key')

五、数据透视表

import pandas as pd
example = pd.DataFrame({'Month': ["January", "January", "January", "January", 
                                  "February", "February", "February", "February", 
                                  "March", "March", "March", "March"],
                   'Category': ["Transportation", "Grocery", "Household", "Entertainment",
                                "Transportation", "Grocery", "Household", "Entertainment",
                                "Transportation", "Grocery", "Household", "Entertainment"],
                   'Amount': [74., 235., 175., 100., 115., 240., 225., 125., 90., 260., 200., 120.]})

5.1 .pivot()

example_pivot = example.pivot(index = 'Category',columns= 'Month',values = 'Amount')

求和

example_pivot.sum(axis = 0)

5.2 .pivot_table()

默认求均值

df.pivot_table(index = 'Sex',columns='Pclass',values='Fare')

aggfunc参数定义求法

df.pivot_table(index = 'Sex',columns='Pclass',values='Fare',aggfunc='max')

计数

df.pivot_table(index = 'Sex',columns='Pclass',values='Fare',aggfunc='count')
pd.crosstab(index = df['Sex'],columns = df['Pclass']) #计数,同上

六、 时间操作

6.1 创建时间序列

6.1.1. pd.to_datetime()

将字符串或其他格式转换为 datetime64[ns] 类型。

pd.to_datetime('2023-04-01')
pd.to_datetime(['2023-01-01', '2023-02-01'])

6.1.2. pd.date_range()

创建固定频率的时间序列。

pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')

常用频率参数包括:

  • 'D':日

  • 'H':小时

  • 'M':月

  • 'Y':年

  • 'W':周

6.2 时间戳与时间区间

6.2.1. Timestamp

单个时间点,Pandas 对 datetime 的封装:

ts = pd.Timestamp('2023-01-01 12:00:00')
ts.year  # 2023
ts.month # 1

6.2.2. Timedelta

表示时间间隔:

delta = pd.Timedelta('2 days 3 hours')

也可以进行加减操作:

pd.Timestamp('2023-01-01') + pd.Timedelta(days=3)

6.3 时间的运算与筛选

6.3.1. 时间加减

df['new_date'] = df['date'] + pd.Timedelta(days=7)

6.3.2. 筛选特定时间段

df[(df['date'] >= '2023-01-01') & (df['date'] <= '2023-03-01')]

6.4 设置索引并重采样

6.4.1. 设置时间索引

df.set_index('date', inplace=True)

6.4.2. 取时间索引中的某个数值

data[data.index.month == 1]

6.4.3. 重采样 resample()

将数据按时间频率重新分组,常用于聚合、统计:

df.resample('M').mean()  # 按月取平均
df.resample('W').sum()   # 按周求和

6.5 时间格式的处理

6.5.1. 提取时间的各部分

df['date'].dt.year
df['date'].dt.month
df['date'].dt.weekday

6.5.2. 格式化输出

df['date'].dt.strftime('%Y-%m-%d')

6.6 常见时间函数总结

函数名 作用
pd.to_datetime() 转换为日期时间格式
pd.date_range() 创建规则时间序列
.dt.year/.month/... 提取时间字段
pd.Timedelta() 表示时间间隔
.resample() 重采样
.strftime() 时间格式化为字符串

七、常用操作

7.1 查看数据结构与基本信息

7.1.1 df.head() / df.tail()

查看前几行或后几行数据:

df.head(5)
df.tail(3)

7.1.2 df.shape / df.columns / df.index

快速了解数据的行列信息:

df.shape     # 返回 (行数, 列数)
df.columns   # 返回列名
df.index     # 返回索引

7.1.3 df.info() / df.describe()

了解字段类型和统计信息:

df.info()       # 查看每列数据类型和非空数量
df.describe()   # 查看数值列统计信息

7.2 数据选择与过滤

7.2.1 选择列

df['列名']
df[['列1', '列2']]

7.2.2 选择行

df.iloc[0]           # 按位置
df.loc[0]            # 按标签
df[df['列'] > 100]   # 条件筛选

7.2.3 多重条件

df[(df['A'] > 10) & (df['B'] < 5)]

6.3 数据修改与添加

7.3.1 新增列

df['新列'] = df['A'] + df['B']

7.3.2 修改数据

df.loc[0, 'A'] = 999

7.3.3 删除列/行

df.drop('列名', axis=1)         # 删除列
df.drop([0, 1], axis=0)        # 删除行

7.4 缺失值处理

7.4.1 检查缺失值

df.isnull()

 

df.isnull().any(axis=0)

7.4.2 删除缺失值

df.dropna()

7.4.3 填充缺失值

df.fillna(5)
df.fillna(method='ffill')  # 前向填充

7.5. 分组与聚合

7.5.1 分组统计

单分组和多重分组

df.groupby('列名').sum()
df.groupby('列名')['目标列'].mean()
grouped = df.groupby('A')
grouped.count()


grouped = df.groupby(['A','B'])
grouped.count()

 

改变索引 
grouped = df.groupby(['A','B'],as_index = False)
grouped.aggregate(np.sum)

#上下等价

df.groupby(['A','B']).sum().reset_index()

传函数名的自定义分组
def get_letter_type(letter):
    if letter.lower() in 'aeiou':
        return 'a'
    else:
        return 'b'
grouped = df.groupby(get_letter_type,axis = 1)
grouped.count()

 

多索引时指定某一个索引分组

level=0表示第一个索引,level=1表示第一个索引,以此类推

grouped = s.groupby(level =0) #或写为level='first'
grouped.sum()

 

7.5.2 拆分范围

 根据bins中给定的范围将ages内容拆分到(10,40],(40,80]内

ages = [15,18,20,21,22,34,41,52,63,79]
bins = [10,40,80]
bins_res = pd.cut(ages,bins)

7.5.3 一列多算

使用.agg([xx,xx,xx])

grouped = df.groupby('A')
grouped['C'].agg([np.sum,np.mean,np.std])
#上下等价
grouped['C'].agg(['sum','mean','std'])

列重命名

grouped['C'].agg(res_sum=np.sum,res_mean='mean',res_std='std')

7.6. 排序与去重

7.6.1 排序

df.sort_values(by='列名', ascending=False)

7.6.2 去重

df.drop_duplicates()

7..7 数据合并与连接

7.7.1 拼接 concat

pd.concat([df1, df2], axis=0)  # 行拼接
pd.concat([df1, df2], axis=1)  # 列拼接

7.7.2 合并 merge

pd.merge(df1, df2, on='key')               # 内连接
pd.merge(df1, df2, how='left', on='key')   # 左连接

7.8 常见函数速查表

操作分类 函数 说明
查看数据 head() / info() 查看基本信息
选择数据 iloc / loc 按位置或标签选取
缺失值 isnull() / fillna() 检查与填充缺失值
分组 groupby() / agg() 聚合运算
合并拼接 merge() / concat() 数据合并
应用函数 apply() / lambda 自定义处理

八、字符串操作

通过 .str 接口完成

8.1 字符串小写/大写/首字母大写

df['列名'].str.lower()     # 全部转小写
df['列名'].str.upper()     # 全部转大写
df['列名'].str.title()     # 每个单词首字母大写

8.2 去除空格、换行等

df['列名'].str.strip()      # 去除首尾空格
df['列名'].str.lstrip()     # 去除左侧空格
df['列名'].str.rstrip()     # 去除右侧空格

也可处理特殊字符,如换行符 \n

df['列名'].str.replace('\n', '')

8.3 查找与匹配字符串

8.3.1 包含判断

df['列名'].str.contains('关键词')

例如: 

s[s.str.contains('Ag')]

可添加正则与忽略大小写:

df['列名'].str.contains('abc', case=False, regex=True)

8.3.2 匹配字符串开头/结尾

df['列名'].str.startswith('前缀')
df['列名'].str.endswith('后缀')

8.4 替换、分割与拼接

8.4.1 替换

df['列名'].str.replace('旧', '新', regex=False)

也支持正则替换:

df['列名'].str.replace('\d+', '', regex=True)  # 去除所有数字

8.4.2 字符串分割

.str.split()

举例: 

s.str.split('_')

s.str.split('_',expand = True)

 

s.str.split('_',expand = True,n=1) #n=1表示切1次

 

8.4.3 拼接字符串

df['新列'] = df['列A'] + '-' + df['列B']

注意拼接前需转换为字符串:

df['列A'].astype(str) + df['列B']

8.5 提取子串与正则提取

8.5.1 提取固定位置子串

df['列名'].str[0:4]     # 提取前4位
df['列名'].str[-2:]     # 提取最后2位

8.5.2 正则提取

df['列名'].str.extract('(\d{4})')  # 提取年份

8.6 字符串长度统计

df['列名'].str.len()

8.7 .get_dummies()

用于将字符串数据转换为虚拟变量(one-hot 编码)。这种方法特别适合处理包含多个分类标签的字符串数据

s.str.get_dummies(sep = '|')

 

1表示该行有此字母,0表示该行没有此字母

8.8 常用字符串函数速查表

操作类型 方法 示例
大小写转换 str.lower() 转小写
去空格 str.strip() 去首尾空格
查找包含 str.contains('a') 包含判断
替换字符 str.replace('a','b') 替换字符串
分割 str.split('-') 按分隔符切分
拼接 列1 + '-' + 列2 拼接列
提取 str.extract('正则') 提取内容
统计长度 str.len()

计算字符串长度

获取one-hot str.get_dummies() 得到对应one-hot值


网站公告

今日签到

点亮在社区的每一天
去签到