Pandas DataFrame 基本操作实例100个

Pandas

是一个基于NumPy的数据分析模块,最初由AQR Capital Management于2008年4月开发,并于2009年底开源。Pandas的名称来源于“Panel Data”(面板数据)和“Python数据分析”(data analysis)。这个库现在由专注于Python数据包开发的PyData开发团队继续开发和维护,属于PyData项目的一部分。

Pandas为Python提供了大量的数据处理函数和方法,使得Python成为强大而高效的数据分析环境。这个库主要提供了三种数据结构:Series(带标签的一维数组)、DataFrame(带标签且大小可变的二维表格结构)和Panel(带标签且大小可变的三维数组)。这些数据结构使得Pandas能够高效地处理大型数据集。

Pandas的主要功能包括数据清理、数据转换、数据提取和分析等。它可以帮助用户解决各种数据问题,如检查两个或多个列之间是否存在相关性,计算数据的平均值、最大值、最小值等。此外,Pandas还能够删除不相关的行或包含错误值的行,这被称为数据清洗。

示例

提高可读性的列重命名:重命名DataFrame列以提高可读性。

df.rename(columns={'old_name': 'new_name'}, inplace=True)

为MultiIndex DataFrames展平索引:为简化起见,展平MultiIndex DataFrame。

df.columns = ['_'.join(col).strip() for col in df.columns.values]

为DataFrame应用条件格式:使用Styler突出显示特定数据点。

df.style.applymap(lambda x: 'background-color: yellow' if x > 0 else 'background-color: red')

使用分类数据类型优化性能:将对象类型转换为分类类型,以加快操作速度并减少内存使用。

df['category'] = df['category'].astype('category')

使用filter动态过滤行:根据动态条件过滤DataFrame行。

df_filtered = df.filter(regex='pattern')

在多个列上应用函数:使用apply和axis=1在行上应用函数。

df['new_column'] = df.apply(lambda row: row['a'] + row['b'], axis=1)

使用concat高效合并DataFrames:在管理索引的同时垂直或水平连接DataFrames。

pd.concat([df1, df2], axis=0, ignore_index=True)

使用read_csv参数进行选择性读取:使用read_csv中的参数读取文件的特定行、列或块。

df = pd.read_csv('file.csv', usecols=['col1', 'col2'], nrows=100)

使用fillna处理缺失数据:用特定值或计算值(如列的均值)填充缺失值。

df.fillna(df.mean(), inplace=True)

检测和过滤异常值:根据z分数或IQR识别并删除异常值。

from scipy.stats import zscore 
df = df[(np.abs(zscore(df)) < 3).all(axis=1)]

用于报告的DataFrame样式化:使用Pandas Styler为报告生成向DataFrame添加CSS样式。

df.style.set_properties(**{'background-color': 'black', 'color': 'white'})

从列创建MultiIndex:将DataFrame列转换为MultiIndex以创建分层级别。

df.set_index(['col1', 'col2'], inplace=True)

使用groupby和自定义函数进行聚合:对数据进行分组并应用自定义聚合函数进行详细分析。

df.groupby('group').agg({'data': lambda x: x.max() - x.min()})

时间序列分解:将时间序列数据分解为趋势、季节性和残差分量。

from statsmodels.tsa.seasonal import seasonal_decompose 
result = seasonal_decompose(df['time_series'], model='additive', freq=365) 
result.plot()

为时间序列分析创建滞后特征:创建滞后特征以在时间序列预测的机器学习模型中使用。

df['lag_1'] = df['series'].shift(1)

使用pivot_table进行多维分析:为复杂数据汇总创建类似电子表格的数据透视表。

df.pivot_table(values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)

使用set_index进行自定义索引:将DataFrame列设置为索引以便于行查找。

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

大型数据集的批处理:以批处理方式处理大型数据集以最小化内存使用。

chunk_size = 10000
for chunk in pd.read_csv('large_dataset.csv', chunksize=chunk_size):
    process(chunk)

使用melt进行数据规范化:将DataFrame从宽格式规范化或展开到长格式。

pd.melt(df, id_vars=['id'], value_vars=['A', 'B', 'C'])

使用query安全访问数据:使用query方法使用查询表达式过滤DataFrame。

df.query('column > 100')

使用loc进行条件选择:使用loc基于标签进行更复杂的条件选择。

df_filtered = df.loc[df['column'] > 10, ['column1', 'column2']]

使用at和iat进行快速标量访问:使用at进行基于标签的标量访问,使用iat进行基于整数的访问。

value = df.at[0, 'column'] value = df.iat[0, 1]

多级索引xs:使用xs从具有多级索引的DataFrame获取交叉部分。

value = df.xs('Level1', level='LevelName', axis=0)

使用factorize创建虚拟变量:将分类变量数值化为虚拟/指示变量。

df['category_encoded'], _ = pd.factorize(df['category_column'])

使用eval和query进行动态查询:使用字符串表达式进行高效查询和列操作。

df_filtered = df.query('column > 10')
df.eval('new_column = column1 + column2', inplace=True)

使用sort_values进行自定义排序:按照一个或多个列进行排序,并指定自定义排序顺序。

df_sorted = df.sort_values(by=['column1', 'column2'], ascending=[True, False])

使用to_datetime进行高效日期解析:将字符串日期有效地转换为日期时间对象。

df['date'] = pd.to_datetime(df['date_string'], format='%Y-%m-%d')

使用chunksize处理大型数据:以可管理的块处理大型数据。

for chunk in pd.read_csv('large_file.csv', chunksize=10000):
    process(chunk)

自定义Groupby聚合:对groupby对象应用自定义聚合函数。

df_grouped = df.groupby('group_column').agg({'data_column': ['mean', 'std', lambda x: x.max() - x.min()]})

时间序列重采样:对时间序列数据进行降采样或升采样。

df_resampled = df.resample('M').mean()

使用pivot进行数据重格式化:基于列值对表进行数据透视。

df_pivoted = df.pivot(index='date', columns='variable', values='value')

使用Multi-Index进行stack和unstack:将具有多级列的DataFrame转换为更紧凑的形式。

stacked = df.stack() 
unstacked = stacked.unstack()

字符串和类别类型之间的转换:将数据类型转换为优化内存使用的格式。

df['string_column'] = df['category_column'].astype('string')
df['category_column'] = df['string_column'].astype('category')

使用不同连接类型合并DataFrames:执行左连接、右连接、内连接和外连接,类似于SQL。

df_merged = pd.merge(df1, df2, how='left', on='key_column')

使用iloc切片DataFrame:使用iloc进行基于位置的索引,通过整数位置选择行和列。

df_subset = df.iloc[0:5, [1, 2]]

根据条件创建数据屏蔽:创建布尔屏蔽以过滤数据。

mask = (df['column'] > 10) & (df['column'] < 20)
df_masked = df[mask]

时间序列的扩展和滚动操作:使用扩展或滚动操作进行累积计算。

df_expanding = df['data_column'].expanding().mean()
df_rolling = df['data_column'].rolling(window=5).mean()

数据转换的列映射:对数据转换应用字典映射到列。

df['column_mapped'] = df['column'].map(mapping_dict)

将字符串拆分为列:将字符串数据拆分为单独的列。

df[['first', 'last']] = df['name'].str.split(' ', expand=True)

在多个级别聚合数据:对groupby执行多级别聚合。

df_multi_agg = df.groupby(['level1', 'level2']).agg({'data1': 'mean', 'dat

使用query进行过滤:query方法允许更可读的过滤语法,特别是对于复杂条件。

df_filtered = df.query('a > 1 and b < 4')

使用assign创建新列:动态向DataFrame添加新列,这对于链式操作特别有用。

df = df.assign(new_column=lambda x: x['a'] + x['b'])

使用applymap进行矢量化操作:在DataFrame上逐元素地应用函数,对于将变换应用于每个元素很有用。

df = df.applymap(lambda x: x*2)

连接DataFrames:垂直或水平组合多个DataFrames。

df_combined = pd.concat([df1, df2], axis=0)  # 垂直

在关键列上合并DataFrames:根据关键列合并DataFrames,类似于SQL连接。

df_merged = pd.merge(df1, df2, on='key_column')

使用get_dummies进行独热编码:将分类变量转换为虚拟/指示变量。

df_with_dummies = pd.get_dummies(df, columns=['category_column'])

自定义聚合的GroupBy:对数据进行分组并应用自定义聚合函数。

df_grouped = df.groupby('group_column').agg(custom_agg_func)

使用cut对数据进行分箱:将数据值分段和排序到箱中。

df['binned_column'] = pd.cut(df['numeric_column'], bins=3)

使用replace进行数据清理:替换DataFrame中的值。

df = df.replace({'old_value': 'new_value'})

删除具有缺失值的列:删除具有一定百分比缺失值的列。

df = df.dropna(axis=1, thresh=int(0.9*len(df)))

DataFrame内存使用情况:检查DataFrame的内存使用情况。

df_memory_usage = df.memory_usage(deep=True)

使用select_dtypes按数据类型选择列:根据数据类型筛选列。

df_numeric = df.select_dtypes(include=['int64', 'float64'])

设置和重置索引:使用列作为DataFrame索引或将其重置。

df.set_index('column_name', inplace=True)
df.reset_index(inplace=True)

使用iterrows对行进行迭代:以(index, Series)对的形式循环DataFrame行。

for index, row in df.iterrows():
    print(index, row['column'])

对DataFrame操作使用inplace=True:许多DataFrame方法提供inplace参数,允许在原地修改DataFrame而不将结果分配给新变量。这可以使代码更简洁,减少内存使用。

import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6],[None, 2, 3],[None, 5, 6],
], columns=['a', 'b', 'c'])# 删除带有NaN值的行
df.dropna(inplace=True)
print(df)

使用melt进行数据重塑:将DataFrame从宽格式重塑为长格式,可选择保留标识符。

df_melted = pd.melt(df, id_vars=['identifier_column'], value_vars=['value_column'])

日期和时间操作:提取或操作日期时间对象的组件。

df['year'] = df['datetime_column'].dt.year

将DataFrame保存为各种格式:将DataFrame导出为CSV、Excel或SQL数据库。

df.to_csv('filename.csv', index=False)
df.to_excel('filename.xlsx', sheet_name='Sheet1')

使用特定dtypes读取数据:在加载数据时指定列数据类型以节省内存。

df = pd.read_csv('filename.csv', dtype={'column': 'dtype'})

使用eval进行高效操作:评估描述DataFrame列操作的字符串。

df['new_column'] = df.eval('column1 + column2')

使用str方法进行数据清洗:清理或操作字符串列。

df['string_column'] = df['string_column'].str.strip().str.lower()

使用df.to_clipboard()将数据复制到剪贴板:将DataFrame的内容复制到剪贴板。

import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6]
], columns=['a', 'b', 'c'])# 将DataFrame复制到剪贴板
df.to_clipboard()

使用.T转置DataFrame:转置DataFrame会交换其行和列,这在数据分析中特别有用,特别是当您想要更改数据集的方向以进行可视化或比较时。

import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6]
], columns=['a', 'b', 'c'])# 转置DataFrame
df_transposed = df.T
print(df_transposed)

使用.apply()应用函数:.apply()方法允许您在DataFrame或Series的轴上应用函数。对于将复杂函数或lambda表达式应用于数据元素非常有用。

import pandas as pddf = pd.DataFrame([[1, 2, 3],[4, 5, 6],[7, 8, 9]
], columns=['a', 'b', 'c'])# 在“a”列中求平方
df['a_squared'] = df['a'].apply(lambda x: x**2)
print(df)

使用~反转过滤条件:使用波浪符~反转布尔条件。当您想要选择不匹配某个条件的行时特别有用,例如在DataFrame中选择非空值。

import pandas as pddf = pd.DataFrame([[1, 2, 3],[1, 2, 4],[None, 2, 4],[2, 2, 3],[None, 2, 4]
], columns=['a', 'b', 'c'])# 通过反转过滤选择“a”不是NaN的行
df_not_null = df[~df['a'].isna()]
print(df_not_null)

条件列创建:使用np.where根据条件创建新列。

df['new_column'] = np.where(df['column'] > condition, value_if_true, value_if_false)

多重索引创建:为更复杂的数据分析创建分层索引(MultiIndex)。

df.set_index(['column1', 'column2'], inplace=True)

透视表:生成用于汇总数据的透视表。

df.pivot_table(values='value_column', index='index_column', columns='columns_column', aggfunc=np.sum)

类别数据转换:将分类数据转换为‘category’类型以提高效率。

df['category_column'] = df['category_column'].astype('category')

在索引上合并:使用它们的索引合并两个数据帧。

pd.merge(df1, df2, left_index=True, right_index=True)

窗口函数:使用滚动窗口进行计算。

df['rolling_sum'] = df['value'].rolling(window=3).sum()

使用GroupBy进行聚合:使用groupby执行高级聚合。

df.groupby('group_column').agg({'value_column': ['sum', 'mean', 'std']})

处理缺失数据:使用插值方法智能地处理缺失数据。

df.interpolate(method='linear', inplace=True)

矢量化字符串操作:使用矢量化操作无需循环应用字符串方法。

df['string_column'].str.upper()

日期处理:将字符串转换为日期时间并提取特征。

df['date_column'] = pd.to_datetime(df['date_column'])
df['year'] = df['date_column'].dt.year

内存优化:通过将数字列下降转换为整数来减少内存使用。

df['int_column'] = pd.to_numeric(df['int_column'], downcast='integer')

交叉表:创建交叉表以探索两列之间的关系。

pd.crosstab(df['column1'], df['column2'])

展开列表:将DataFrame列中的列表扩展为单独的行。

df.explode('list_column')

数据归一化:为机器学习归一化数据列。

df['normalized'] = (df['column'] - df['column'].mean()) / df['column'].std()

条件应用函数:根据条件将函数应用于特定行或列。

df.apply(lambda x: func(x) if condition else x)

处理重复行:识别并删除重复行。

df.drop_duplicates(subset=['column1', 'column2'], keep='first')

类别排序:逻辑排序类别,而不是按字母顺序排序。

from pandas.api.types import CategoricalDtype
cat_type = CategoricalDtype(categories=['low', 'medium', 'high'], ordered=True)
df['ordered_category'] = df['category_column'].astype(cat_type)

时间序列重采样:为不同的时间框架重采样时间序列数据。

df.resample('M').mean()

过滤的查询方法:使用查询更简洁地过滤行。

df.query('column > value')

为DataFrame应用样式:为更好地可视化,在DataFrame上应用条件格式。

df.style.applymap(lambda x: 'color: red' if x < 0 else 'color: black')

动态列选择:根据条件检查其数据类型或其他条件选择列。

numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns

高效的日期范围创建:生成日期和时间序列。

dates = pd.date_range(start='2020-01-01', end='2020-12-31', freq='D')

自定义列聚合:在groupby中对不同列应用不同的聚合函数。

df.groupby('group_col').agg({'data1': 'sum', 'data2': 'mean'})

DataFrame联接操作:使用索引或公共列联接DataFrame,类似于SQL联接。

df_joined = df1.join(df2.set_index('key'), on='key')

保存到多个Excel表:将不同的DataFrame写入同一Excel文件的不同工作表。

with pd.ExcelWriter('output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1')
    df2.to_excel(writer, sheet_name='Sheet2')

列合并:按列合并DataFrame,根据索引对齐。

df_concat = pd.concat([df1, df2], axis=1)

按行数据追加:将一个DataFrame的行追加到另一个DataFrame。

df_appended = df1.append(df2, ignore_index=True)

类别数据排序:控制分类数据中类别的顺序。

df['category'] = pd.Categorical(df['category'], categories=['low', 'medium', 'high'], ordered=True)

重复行识别:基于特定列识别和处理重复行。

duplicates = df.duplicated(subset=['col1', 'col2'], keep=False)
df_duplicates = df[duplicates]

加权平均数计算:为分组数据计算加权平均数。

df['weighted_mean'] = df.groupby('group')['value'].transform(lambda x: np.average(x, weights=df.loc[x.index, 'weight']))

用于数据概览的Pandas Profiling:为DataFrame生成全面的报告进行初步数据分析。

import pandas_profiling
report = pandas_profiling.ProfileReport(df)
report.to_file("data_analysis.html")

多重索引操作用于分层数据:使用分层索引(MultiIndex)操作DataFrame以处理复杂数据结构。

df_multi = df.set_index(['level_1', 'level_2'])

使用布尔索引对DataFrame进行切片:使用布尔条件对DataFrame进行切片以进行数据子集化。

df_sliced = df[df['column'] > value]

滚动窗口计算:在滚动窗口中执行计算,例如移动平均数。

df_rolling_avg = df['data_column'].rolling(window=5).mean()

扩展窗口用于累积计算:使用扩展窗口计算累积统计信息。

df_cum_sum = df['data_column'].expanding().sum()


总结

总的来说,Pandas是一个强大而灵活的数据分析工具,它使得Python在数据分析领域具有广泛的应用。无论是金融、科学、社会科学还是其他领域,Pandas都可以帮助用户高效地处理和分析数据,从而得出有价值的结论。以上100个基本操作实例涉及数据排序、数值计算、数据分析、重复处理、布尔索引切片、多重索引设置、文件操作等等操作,其中提到的函数、方法和属性包括不限于以下索引:

函数索引

agg, append, apply, astype, at, columns, concat, crosstab, date_range, downcast, drop_duplicates, dropna, duplicated, eval, expanding, explode, fillna, filter, groupby, iloc, inplace, interpolate, iterrows, join, keep, loc, map, mask, melt, memory_usage, merge, np.average, np.where, pandas_profiling.ProfileReport, pd.Categorical, pd.factorize, pd.melt, pd.to_datetime, pivot, pivot_table, query, read_csv, resample, rolling, seasonal_decompose, select_dtypes, set_index, reset_index, shift, sort_values, stack,\xa0unstack, style.applymap, to_clipboard, to_csv, to_excel, to_datetime, to_file, agg, append, apply, astype, at, columns, concat, crosstab, date_range, downcast, drop_duplicates, dropna, duplicated, eval, expanding, explode, fillna, filter, groupby, iloc, inplace, interpolate, iterrows, join, keep, loc, map, mask, melt, memory_usage, merge, np.average, np.where, pandas_profiling.ProfileReport, pd.Categorical, pd.factorize, pd.melt, pd.to_datetime, pivot, pivot_table, query, read_csv, resample, rolling, seasonal_decompose, select_dtypes, set_index, reset_index, shift, sort_values, stack,\xa0unstack, style.applymap, to_clipboard, to_csv, to_excel, to_datetime, to_file 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/508305.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[AutoSar]BSW_Com09 CAN driver 模块FULL(BASIC)CAN、FIFO选择

目录 关键词平台说明一、FULL CAN 和Basic CAN 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &#xff0c;芯片厂商TI 英飞凌编程语言C&#xff0c;C编译器HighTec (GCC)autosar版本4.3.1 >>>>>回到总目录<&…

Vue-03

Vue指令 v-bind 作用&#xff1a;动态设置html的标签属性&#xff08;src url title…&#xff09; 语法&#xff1a;v-bind:属性名"表达式" 举例代码如下&#xff1a; 实现效果如下&#xff1a; 案例&#xff1a;图片切换 实现代码如下&#xff1a; 实现的效果…

unity学习(46)——服务器三次注册限制以及数据库化角色信息1--数据流程

1.先找到服务器创建角色信息代码的位置&#xff0c;UserBizImpl.cs中&#xff1a; public PlayerModel create(string accId, string name, int job) {PlayerModel[] playerModelArray this.list(accId);//list是个自建函数&#xff0c;本质通过accId来查询if (playerModelAr…

高斯消元法的应用

如果有这么一个线性规划系统的例子&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 将如上的线性规划系统转换为&#xff1a; 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 这里要注意的是转换后的约束条件全部都变…

网络安全: Kali Linux 使用 nmap 扫描目标主机

目录 一、实验 1.环境 2. Kali Linux (2024.1) 使用 namp 扫描目标主机 3.Kali Linux (2024.1)远程登录 Windows Server 4.Kali Linux (2024.1) 使用crunch字典工具 5.Kali Linux (2024.1)使用hydra密码工具 6.Kali Linux (2022.3) 通过SSH端口获取 Ubuntu 密码 二、问题…

Python实现BIAS工具判断信号:股票技术分析的工具系列(4)

Python实现BIAS工具判断信号&#xff1a;股票技术分析的工具系列&#xff08;4&#xff09; 介绍算法解释 代码rolling函数介绍完整代码data代码BIAS.py 介绍 在股票技术分析中&#xff0c;BIAS&#xff08;乖离率&#xff09;是一种常用的技术指标&#xff0c;用于判断股票价…

XSS_lab(level1-level5)

level1 直接输入页面没有发现输入框&#xff0c;观察url发现有传参 尝试修改传参为&#xff1a;<script>alert(1)</script> 过啦&#xff01; level2 页面中有输入框&#xff0c;尝试构建语句&#xff1a;<script>alert(1)</script>,传输后查看源代…

[Vulnhub]靶场 Red

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 …

欧拉回路(Eulerian Path)

1.定义 如果图 G G G(有向图或者无向图)中所有边一次仅且一次行遍所有顶点的通路称作欧拉通路。 如果图 G G G中所有边一次仅且一次行遍所有顶点的回路称作欧拉回路。 具有欧拉回路的图成为欧拉图(简称 E E E图)。具有欧拉通路但不具有欧拉回路的图成为半欧拉图。 顶点可以经…

区块链媒体发布推广10个热门案例解析-华媒舍

区块链技术的发展已经引起了媒体的广泛关注&#xff0c;越来越多的区块链媒体纷纷发布推广相关的热门案例。本文将介绍10个成功的区块链媒体推广案例&#xff0c;并分享它们的成功秘诀&#xff0c;帮助读者更好地了解区块链媒体推广的方法与技巧。 随着区块链技术的成熟和应用场…

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行 目录 Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行前言1 使用GUI-Guider设计UI1.1 创建工程1.2 设计UI 2 ESP工程导入UI2.1 移植LVGL2.2 移植UI文件2.3 调用UI文件2.4 烧录测试 结束语 前言 GU…

C# 学习第四弹——字符串

一、char类型的使用 字符使用单引号&#xff0c;单个字符 转义字符是一种特殊的字符变量&#xff0c;以反斜线开头&#xff0c;后跟一个或多个字符。 输出多级目录可以使用 二、字符串的声明和初始化 1、引用字符串常量 引用字符串常量初始化——字符使用单引号&#xff0…