page contents

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

本文讲述了100 个必备的python代码,有效增强你的数据处理能力!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

attachments-2024-02-ekBMQIGf65d445eba053f.png本文讲述了100 个必备的python代码,有效增强你的数据处理能力!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

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

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

提高可读性的列重命名:重命名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 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)

使用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 pd


df = pd.DataFrame([

    [1, 2, 3],

    [4, 5, 6]

], columns=['a', 'b', 'c'])


# 将DataFrame复制到剪贴板

df.to_clipboard()

# 现在您可以将DataFrame数据粘贴到另一个应用程序中。

使用.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)

使用.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)

使用~反转过滤条件:使用波浪符~反转布尔条件。当您想要选择不匹配某个条件的行时特别有用,例如在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)

条件列创建:使用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()

结论

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

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

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-02-20 14:26
  • 阅读 ( 186 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章