100个 Python 小技巧,有效增强你的数据处理能力

Python 凭借其强大的工具库提供了一系列功能,简化了数据操作和分析。

本文分享 100 个必备的 Python 代码,每个都经过精心设计,旨在增强您的数据处理能力。

从基本的数据清洗技术到高级的数据转换和分析策略,这些一行代码旨在简化您的编码工作流程,提高处理速度,并从数据中解锁更深层次的洞察力。

本文来自群里小伙伴总结,喜欢记得收藏、关注、点赞,更多技巧,文末加入交流群

  1. 提高可读性的列重命名:重命名DataFrame列以提高可读性。
df.rename(columns={'old_name': 'new_name'}, inplace=True)
  1. 为MultiIndex DataFrames展平索引:为简化起见,展平MultiIndex DataFrame。
df.columns = ['_'.join(col).strip() for col in df.columns.values]
  1. 为DataFrame应用条件格式:使用Styler突出显示特定数据点。
df.style.applymap(lambda x: 'background-color: yellow' if x > 0 else 'background-color: red')
  1. 使用分类数据类型优化性能:将对象类型转换为分类类型,以加快操作速度并减少内存使用。
df['category'] = df['category'].astype('category')
  1. 使用filter动态过滤行:根据动态条件过滤DataFrame行。
df_filtered = df.filter(regex='pattern')
  1. 在多个列上应用函数:使用apply和axis=1在行上应用函数。
df['new_column'] = df.apply(lambda row: row['a'] + row['b'], axis=1)
  1. 使用concat高效合并DataFrames:在管理索引的同时垂直或水平连接DataFrames。
pd.concat([df1, df2], axis=0, ignore_index=True)
  1. 使用read_csv参数进行选择性读取:使用read_csv中的参数读取文件的特定行、列或块。
df = pd.read_csv('file.csv', usecols=['col1', 'col2'], nrows=100)
  1. 使用fillna处理缺失数据:用特定值或计算值(如列的均值)填充缺失值。
df.fillna(df.mean(), inplace=True)
  1. 检测和过滤异常值:根据z分数或IQR识别并删除异常值。
from scipy.stats import zscore 
df = df[(np.abs(zscore(df)) < 3).all(axis=1)]
  1. 用于报告的DataFrame样式化:使用Pandas Styler为报告生成向DataFrame添加CSS样式。
df.style.set_properties(**{'background-color': 'black', 'color': 'white'})
  1. 从列创建MultiIndex:将DataFrame列转换为MultiIndex以创建分层级别。
df.set_index(['col1', 'col2'], inplace=True)
  1. 使用groupby和自定义函数进行聚合:对数据进行分组并应用自定义聚合函数进行详细分析。
df.groupby('group').agg({'data': lambda x: x.max() - x.min()})
  1. 时间序列分解:将时间序列数据分解为趋势、季节性和残差分量。
from statsmodels.tsa.seasonal import seasonal_decompose 
result = seasonal_decompose(df['time_series'], model='additive', freq=365) 
result.plot()
  1. 为时间序列分析创建滞后特征:创建滞后特征以在时间序列预测的机器学习模型中使用。
df['lag_1'] = df['series'].shift(1)
  1. 使用pivot_table进行多维分析:为复杂数据汇总创建类似电子表格的数据透视表。
df.pivot_table(values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum)
  1. 使用set_index进行自定义索引:将DataFrame列设置为索引以便于行查找。
df.set_index('column_name', inplace=True)
  1. 大型数据集的批处理:以批处理方式处理大型数据集以最小化内存使用。
chunk_size = 10000
for chunk in pd.read_csv('large_dataset.csv', chunksize=chunk_size):
    process(chunk)
  1. 使用melt进行数据规范化:将DataFrame从宽格式规范化或展开到长格式。
pd.melt(df, id_vars=['id'], value_vars=['A', 'B', 'C'])
  1. 使用query安全访问数据:使用query方法使用查询表达式过滤DataFrame。
df.query('column > 100')
  1. 使用loc进行条件选择:使用loc基于标签进行更复杂的条件选择。
df_filtered = df.loc[df['column'] > 10, ['column1', 'column2']]
  1. 使用at和iat进行快速标量访问:使用at进行基于标签的标量访问,使用iat进行基于整数的访问。
value = df.at[0, 'column'] value = df.iat[0, 1]
  1. 多级索引xs:使用xs从具有多级索引的DataFrame获取交叉部分。
value = df.xs('Level1', level='LevelName', axis=0)
  1. 使用factorize创建虚拟变量:将分类变量数值化为虚拟/指示变量。
df['category_encoded'], _ = pd.factorize(df['category_column'])
  1. 使用eval和query进行动态查询:使用字符串表达式进行高效查询和列操作。
df_filtered = df.query('column > 10')
df.eval('new_column = column1 + column2', inplace=True)
  1. 使用sort_values进行自定义排序:按照一个或多个列进行排序,并指定自定义排序顺序。
df_sorted = df.sort_values(by=['column1', 'column2'], ascending=[True, False])
  1. 使用to_datetime进行高效日期解析:将字符串日期有效地转换为日期时间对象。
df['date'] = pd.to_datetime(df['date_string'], format='%Y-%m-%d')
  1. 使用chunksize处理大型数据:以可管理的块处理大型数据。
for chunk in pd.read_csv('large_file.csv', chunksize=10000):
    process(chunk)
  1. 自定义Groupby聚合:对groupby对象应用自定义聚合函数。
df_grouped = df.groupby('group_column').agg({'data_column': ['mean', 'std', lambda x: x.max() - x.min()]})
  1. 时间序列重采样:对时间序列数据进行降采样或升采样。
df_resampled = df.resample('M').mean()
  1. 使用pivot进行数据重格式化:基于列值对表进行数据透视。
df_pivoted = df.pivot(index='date', columns='variable', values='value')
  1. 使用Multi-Index进行stack和unstack:将具有多级列的DataFrame转换为更紧凑的形式。
stacked = df.stack() 
unstacked = stacked.unstack()
  1. 字符串和类别类型之间的转换:将数据类型转换为优化内存使用的格式。
df['string_column'] = df['category_column'].astype('string')
df['category_column'] = df['string_column'].astype('category')
  1. 使用不同连接类型合并DataFrames:执行左连接、右连接、内连接和外连接,类似于SQL。
df_merged = pd.merge(df1, df2, how='left', on='key_column')
  1. 使用iloc切片DataFrame:使用iloc进行基于位置的索引,通过整数位置选择行和列。
df_subset = df.iloc[0:5, [1, 2]]
  1. 根据条件创建数据屏蔽:创建布尔屏蔽以过滤数据。
mask = (df['column'] > 10) & (df['column'] < 20)
df_masked = df[mask]
  1. 时间序列的扩展和滚动操作:使用扩展或滚动操作进行累积计算。
df_expanding = df['data_column'].expanding().mean()
df_rolling = df['data_column'].rolling(window=5).mean()
  1. 数据转换的列映射:对数据转换应用字典映射到列。
df['column_mapped'] = df['column'].map(mapping_dict)
  1. 将字符串拆分为列:将字符串数据拆分为单独的列。
df[['first', 'last']] = df['name'].str.split(' ', expand=True)
  1. 在多个级别聚合数据:对groupby执行多级别聚合。
df_multi_agg = df.groupby(['level1', 'level2']).agg({'data1': 'mean', 'dat
  1. 使用query进行过滤:query方法允许更可读的过滤语法,特别是对于复杂条件。
df_filtered = df.query('a > 1 and b < 4')
  1. 使用assign创建新列:动态向DataFrame添加新列,这对于链式操作特别有用。
df = df.assign(new_column=lambda x: x['a'] + x['b'])
  1. 使用applymap进行矢量化操作:在DataFrame上逐元素地应用函数,对于将变换应用于每个元素很有用。
df = df.applymap(lambda x: x*2)
  1. 连接DataFrames:垂直或水平组合多个DataFrames。
df_combined = pd.concat([df1, df2], axis=0)  # 垂直
  1. 在关键列上合并DataFrames:根据关键列合并DataFrames,类似于SQL连接。
df_merged = pd.merge(df1, df2, on='key_column')
  1. 使用get_dummies进行独热编码:将分类变量转换为虚拟/指示变量。
df_with_dummies = pd.get_dummies(df, columns=['category_column'])
  1. 自定义聚合的GroupBy:对数据进行分组并应用自定义聚合函数。
df_grouped = df.groupby('group_column').agg(custom_agg_func)
  1. 使用cut对数据进行分箱:将数据值分段和排序到箱中。
df['binned_column'] = pd.cut(df['numeric_column'], bins=3)
  1. 使用replace进行数据清理:替换DataFrame中的值。
df = df.replace({'old_value': 'new_value'})
  1. 删除具有缺失值的列:删除具有一定百分比缺失值的列。
df = df.dropna(axis=1, thresh=int(0.9*len(df)))
  1. DataFrame内存使用情况:检查DataFrame的内存使用情况。
df_memory_usage = df.memory_usage(deep=True)
  1. 使用select_dtypes按数据类型选择列:根据数据类型筛选列。
df_numeric = df.select_dtypes(include=['int64', 'float64'])
  1. 设置和重置索引:使用列作为DataFrame索引或将其重置。
df.set_index('column_name', inplace=True)
df.reset_index(inplace=True)
  1. 使用iterrows对行进行迭代:以(index, Series)对的形式循环DataFrame行。
for index, row in df.iterrows():
    print(index, row['column'])
  1. 对DataFrame操作使用inplace=True:许多DataFrame方法提供inplace参数,允许在原地修改DataFrame而不将结果分配给新变量。这可以使代码更简洁,减少内存使用。
import pandas as pd



df = 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)
  1. 使用melt进行数据重塑:将DataFrame从宽格式重塑为长格式,可选择保留标识符。
df_melted = pd.melt(df, id_vars=['identifier_column'], value_vars=['value_column'])
  1. 日期和时间操作:提取或操作日期时间对象的组件。
df['year'] = df['datetime_column'].dt.year
  1. 将DataFrame保存为各种格式:将DataFrame导出为CSV、Excel或SQL数据库。
df.to_csv('filename.csv', index=False)
df.to_excel('filename.xlsx', sheet_name='Sheet1')
  1. 使用特定dtypes读取数据:在加载数据时指定列数据类型以节省内存。
df = pd.read_csv('filename.csv', dtype={'column': 'dtype'})
  1. 使用eval进行高效操作:评估描述DataFrame列操作的字符串。
df['new_column'] = df.eval('column1 + column2')
  1. 使用str方法进行数据清洗:清理或操作字符串列。
df['string_column'] = df['string_column'].str.strip().str.lower()
  1. 使用df.to_clipboard()将数据复制到剪贴板:此方法将DataFrame的内容复制到剪贴板,使您可以轻松地将其粘贴到另一个应用程序中。这是一种方便的方式,可以在不保存然后导入数据的情况下传输数据。
import pandas as pd

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

# 将DataFrame复制到剪贴板
df.to_clipboard()
# 现在您可以将DataFrame数据粘贴到另一个应用程序中。
  1. 使用.T转置DataFrame:转置DataFrame会交换其行和列,这在数据分析中特别有用,特别是当您想要更改数据集的方向以进行可视化或比较时。
import pandas as pd

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

# 转置DataFrame
df_transposed = df.T
print(df_transposed)
  1. 使用.apply()应用函数:.apply()方法允许您在DataFrame或Series的轴上应用函数。对于将复杂函数或lambda表达式应用于数据元素非常有用。
import pandas as pd

df = 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)
  1. 使用反转过滤条件:使用波浪符反转布尔条件。当您想要选择不匹配某个条件的行时特别有用,例如在DataFrame中选择非空值。
import pandas as pd

df = 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)
  1. 条件列创建:使用np.where根据条件创建新列。
df['new_column'] = np.where(df['column'] > condition, value_if_true, value_if_false)
  1. 多重索引创建:为更复杂的数据分析创建分层索引(MultiIndex)。
df.set_index(['column1', 'column2'], inplace=True)
  1. 透视表:生成用于汇总数据的透视表。
df.pivot_table(values='value_column', index='index_column', columns='columns_column', aggfunc=np.sum)
  1. 类别数据转换:将分类数据转换为‘category’类型以提高效率。
df['category_column'] = df['category_column'].astype('category')
  1. 在索引上合并:使用它们的索引合并两个数据帧。
pd.merge(df1, df2, left_index=True, right_index=True)
  1. 窗口函数:使用滚动窗口进行计算。
df['rolling_sum'] = df['value'].rolling(window=3).sum()
  1. 使用GroupBy进行聚合:使用groupby执行高级聚合。
df.groupby('group_column').agg({'value_column': ['sum', 'mean', 'std']})
  1. 处理缺失数据:使用插值方法智能地处理缺失数据。
df.interpolate(method='linear', inplace=True)
  1. 矢量化字符串操作:使用矢量化操作无需循环应用字符串方法。
df['string_column'].str.upper()
  1. 日期处理:将字符串转换为日期时间并提取特征。
df['date_column'] = pd.to_datetime(df['date_column'])
df['year'] = df['date_column'].dt.year
  1. 内存优化:通过将数字列下降转换为整数来减少内存使用。
df['int_column'] = pd.to_numeric(df['int_column'], downcast='integer')
  1. 交叉表:创建交叉表以探索两列之间的关系。
pd.crosstab(df['column1'], df['column2'])
  1. 展开列表:将DataFrame列中的列表扩展为单独的行。
df.explode('list_column')
  1. 数据归一化:为机器学习归一化数据列。
df['normalized'] = (df['column'] - df['column'].mean()) / df['column'].std()
  1. 条件应用函数:根据条件将函数应用于特定行或列。
df.apply(lambda x: func(x) if condition else x)
  1. 处理重复行:识别并删除重复行。
df.drop_duplicates(subset=['column1', 'column2'], keep='first')
  1. 类别排序:逻辑排序类别,而不是按字母顺序排序。
from pandas.api.types import CategoricalDtype
cat_type = CategoricalDtype(categories=['low', 'medium', 'high'], ordered=True)
df['ordered_category'] = df['category_column'].astype(cat_type)
  1. 时间序列重采样:为不同的时间框架重采样时间序列数据。
df.resample('M').mean()
  1. 过滤的查询方法:使用查询更简洁地过滤行。
df.query('column > value')
  1. 为DataFrame应用样式:为更好地可视化,在DataFrame上应用条件格式。


df.style.applymap(lambda x: 'color: red' if x < 0 else 'color: black')
  1. 动态列选择:根据条件检查其数据类型或其他条件选择列。
numeric_cols = df.select_dtypes(include=['int64', 'float64']).columns
  1. 高效的日期范围创建:生成日期和时间序列。
dates = pd.date_range(start='2020-01-01', end='2020-12-31', freq='D')
  1. 自定义列聚合:在groupby中对不同列应用不同的聚合函数。
df.groupby('group_col').agg({'data1': 'sum', 'data2': 'mean'})
  1. DataFrame联接操作:使用索引或公共列联接DataFrame,类似于SQL联接。
df_joined = df1.join(df2.set_index('key'), on='key')
  1. 保存到多个Excel表:将不同的DataFrame写入同一Excel文件的不同工作表。
with pd.ExcelWriter('output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1')
    df2.to_excel(writer, sheet_name='Sheet2')
  1. 列合并:按列合并DataFrame,根据索引对齐。
df_concat = pd.concat([df1, df2], axis=1)
  1. 按行数据追加:将一个DataFrame的行追加到另一个DataFrame。
df_appended = df1.append(df2, ignore_index=True)
  1. 类别数据排序:控制分类数据中类别的顺序。
df['category'] = pd.Categorical(df['category'], categories=['low', 'medium', 'high'], ordered=True)
  1. 重复行识别:基于特定列识别和处理重复行。
duplicates = df.duplicated(subset=['col1', 'col2'], keep=False)
df_duplicates = df[duplicates]
  1. 加权平均数计算:为分组数据计算加权平均数。
df['weighted_mean'] = df.groupby('group')['value'].transform(lambda x: np.average(x, weights=df.loc[x.index, 'weight']))
  1. 用于数据概览的Pandas Profiling:为DataFrame生成全面的报告进行初步数据分析。
import pandas_profiling
report = pandas_profiling.ProfileReport(df)
report.to_file("data_analysis.html")
  1. 多重索引操作用于分层数据:使用分层索引(MultiIndex)操作DataFrame以处理复杂数据结构。
df_multi = df.set_index(['level_1', 'level_2'])
  1. 使用布尔索引对DataFrame进行切片:使用布尔条件对DataFrame进行切片以进行数据子集化。
df_sliced = df[df['column'] > value]
  1. 滚动窗口计算:在滚动窗口中执行计算,例如移动平均数。
df_rolling_avg = df['data_column'].rolling(window=5).mean()
  1. 扩展窗口用于累积计算:使用扩展窗口计算累积统计信息。
df_cum_sum = df['data_column'].expanding().sum()

结论

这100个Python Pandas代码片段的全面探索为数据科学家和分析师提供了一个强大的工具包,旨在充分利用数据处理和分析的潜力。通过涵盖一系列技术——从基本数据清理和转换到更高级的操作,如多索引、时间序列分析和动态数据聚合——本指南为专业人士提供了必要的技能,以高效地处理、分析和可视化数据。

无论您处理的是大型数据集,需要复杂的数据转换,还是试图从复杂的数据结构中得出深刻的结论,这些片段都可以作为创建更干净的代码、加速处理并增强分析深度的构建块。通过这些技术的实际应用,用户可以显著提升其数据分析项目,确保它们不仅满足,而且超越了现代数据驱动决策的需求。

技术交流

独学而无优则孤陋而寡闻,技术要学会交流、分享,不建议闭门造车。

建立了技术交流与面试交流群,面试真题、答案获取,均可加交流群获取,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、微信搜索公众号:Python学习与数据挖掘,后台回复:交流
方式②、添加微信号:dkl88194,备注:交流

资料
我们打造了《数据分析实战案例宝典》,特点:从0到1轻松学习,方法论及原理、代码、案例应有尽有,所有案例都是按照这样的节奏进行表述。

在这里插入图片描述

在这里插入图片描述

  • 14
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【为什么要学习这门课程】深度学习框架如TensorFlow和Pytorch掩盖了深度学习底层实现方法,那能否能用Python代码从零实现来学习深度学习原理呢?本课程就为大家提供了这个可能,有助于深刻理解深度学习原理。左手原理、右手代码,双管齐下!本课程详细讲解深度学习原理并进行Python代码实现深度学习网络。课程内容涵盖感知机、多层感知机、卷积神经网络、循环神经网络,并使用Python 3及Numpy、Matplotlib从零实现上述神经网络。本课程还讲述了神经网络的训练方法与实践技巧,且开展了代码实践演示。课程对于核心内容讲解深入细致,如基于计算图理解反向传播算法,并用数学公式推导反向传播算法;另外还讲述了卷积加速方法im2col。【课程收获】本课程力求使学员通过深度学习原理、算法公式及Python代码的对照学习,摆脱框架而掌握深度学习底层实现原理与方法。本课程将给学员分享深度学习的Python实现代码。课程代码通过Jupyter Notebook演示,可在Windows、ubuntu等系统上运行,且不需GPU支持。【优惠说明】 课程正在优惠中!  备注:购课后可加入白勇老师课程学习交流QQ群:957519975【相关课程】学习本课程的前提是会使用Python语言以及Numpy和Matplotlib库。相关课程链接如下:《Python编程的术与道:Python语言入门》https://edu.csdn.net/course/detail/27845《玩转Numpy计算库》https://edu.csdn.net/lecturer/board/28656《玩转Matplotlib数据绘图库》https://edu.csdn.net/lecturer/board/28720【课程内容导图及特色】

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值