「Python」Pandas-DataFrame的相关操作二

简介: 如果这篇文章没有找到你想要的数据操作,请光顾我的上一篇文章哦「Python」Pandas-DataFrame的相关操作一话不多说,直接实战吧~

「Python」Pandas-DataFrame的相关操作二


如果这篇文章没有找到你想要的数据操作,请光顾我的上一篇文章哦


「Python」Pandas-DataFrame的相关操作一

话不多说,直接实战吧~


合并为一列并重置索引


需求:初始值有三列且每一列的数量均不相同,需要将三列合并为一列

实现效果如下:

1.png

主要是使用了melt函数,它将所有列变成行(显示为列变量)并在新列值中列出所有关联值。实现功能如下:

1.png

所以即使对于不同列的数量不相同的情况也可以合并为新的一列,对于空值,只需要.dropna()

实现代码:

df.melt().dropna().reset_index(drop=True)
# dropna()是为了解决三列的长短不一的情况,即有些列10行,有些列8行,需要除去空值。

为不同的列指定标签


案例一


需求:将高级、中级、低级管理者分别添加对应的类别标签,即1-2-3。

实现效果:

1.png

使用df['variable'].unique().tolist()就可以获取variable列出现过的值,通过list.index()方法就可以获取对应值的下标,即可能的下标值为0、1、2,就刚好和我们要的标签对应起来了。结合.apply方法,添加新列group即可。

实现代码:

# admin_dict = ['高级管理者', '中级管理者', '初级管理者']  
# df['variable'].unique().tolist() # 转化为列表
df['variable'].apply(lambda x : (admin_dict.index(x) + 1) )

index(x) + 1实际上就是把他变为1-2-3,默认是从0开始。


案例二


需求:将甲、乙、丙三种种子的类别标签添加到对应的数据中去。


即需要产量数据和类别标签两列数据。且对应的数据需要对应相应的类别。不妨将甲、乙、丙变为0-1-2。

原始数据:

1.png

实现效果:

1.png

先通过.stack()将所有的数据变为一列,再考虑如何添加对应标签的问题。


.reset_index(level=0)即去除掉第一个索引(unnamed...),保留原来的(0,1,2)索引。

reset_index(drop=True)是新的dataframe的索引重新排列为有序的。

代码实现:

先通过.stack()将所有的数据变为一列,再考虑如何添加对应标签的问题。
.reset_index(level=0)即去除掉第一个索引(unnamed...),保留原来的(0,1,2)索引。
reset_index(drop=True)是新的dataframe的索引重新排列为有序的。
代码实现:
作者:xincheng_q
链接:https://juejin.cn/post/7151968544933019656
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如果想要将group列的值替换成甲、乙、丙的话,需要用到.apply方法,和案例一中的相似,这里不具体实现了。


案例三


需求:将含有两个标签的表格数据变为列数据,且index设置为对应的标签。(复合标签,如:(B1,A1))

原始数据:

1.png

实现效果:

1.png

仍然通过.stack()方法将数据展开成为一列,和前面一样,需要注意的是这里还使用了.astype()方法,将某一列的值全部变为同一类型,方便运算。

代码实现:

goods.stack().reset_index().rename(columns={0:'value'})
goods['value'] = goods['value'].astype(int)  
# astype(int):将某一列的值的类型变为int

统计一行的平均值并作为新的一列


需求:统一某一行的平均值并把它作为新的一列加在原始数据中。


计算平均值


方法一:

df5.iloc[:,1:].mean(axis=1)  # 直接算均值 

方法二:

df['Col_sum'] = df.apply(lambda x: x.sum() / len(x), axis=1)
# 可以适当变化取需要的列并求平均值  
# df['col_sum'] = df.iloc[,1:].apply(lambda x : x.sum() / len(x), axis = 1)

方法三:

# 计算每列的平均值并作为新的行
df.loc['Row_sum'] = df.apply(lambda x: x.sum())

根据已有列进行运算得到新的列


需求:根据已有列,拓展已有列的数值运算列。


原始数据:

1.png

实现效果:

1.png

代码实现:

# 方法一:
df3['p0q0'] = [df3.iloc[i,0] * df3.iloc[i,2] for i in range(len(df3))]
df3['p1q0'] = [df3.iloc[i,0] * df3.iloc[i,3] for i in range(len(df3))]
df3['p0q1'] = [df3.iloc[i,1] * df3.iloc[i,2] for i in range(len(df3))]
df3['p1q1'] = [df3.iloc[i,1] * df3.iloc[i,3] for i in range(len(df3))]
# 方法二:
[p1 * q1 for p1, q1 in zip(df7['Dollars']['1'],df7['Units']['1'])]
# 对某一列求和
sum(df3['p0q1'])

查找某一列超过一定数值


需求:DataFrame数据中查找某一列的数据大于某个值


代码实现:

data[data['月消费支出额(元)'] >= 600]

直接嵌套即可,有种套娃的感觉(bushi

pivot_table


需求:汇总人员的销售产品数量和收入总额


原始数据:

1.png

汇总不同销售人员的销售总额:

1.png

展示一个销售人员销售不同商品的数量:

1.png

主要用到pivot_table的aggfunc,聚合函数。

代码实现:

df.pivot_table(index='Name',values=['Dollars'],aggfunc=['count',np.sum]) 
# index:索引列  values:值  
# aggfunc:聚合函数(可以有多个)
# margins=True汇总
#  汇总每位销售人员销售每种产品的数量与销售额
df.pivot_table(index='Name',values=['Dollars'],columns=['Product'],aggfunc=['count',np.sum],margins=True)

绘图按照值从低到高排序


实现效果:

1.png

考查.sort_values()方法,参数by指定按照什么值排序,ascending为False时,从大到小排,反之,为从小到大排。

代码实现:

dft.sort_values(by=['含量'],ascending=False).plot(kind='bar')

柱状图不同类型不同颜色


需求:同一个柱状图中不同类型显示的颜色不同


实现效果:

1.png

通过dataframe.plot()指定color参数为plt.cm.Paired()即可实现同一个柱形图不同种类的颜色不同。

代码实现:

plt.bar(range(len(df3)), df3['次数'], 
        color=plt.cm.Paired(np.arange(len(df3))))
xlabel = ['日常', '约会', 'party聚会', 
            '旅行', '商务', '运动', '情趣', '其它']
plt.xticks(range(len(xlabel)),xlabel) # 设置标签

按照月份统计


需求:实现按月份统计销售量

原始数据:

1.png

实现效果:

1.png

代码实现


初步想法:

# Date:2013-01-01 ~ 2016-01-01
cakes.groupby(cakes['Date'].apply(lambda x:x.month)).sum()  

上述代码统计的是所有年份的1月,效果如下:

1.png

我们需要实现的目标是:每一年的月份分别统计。所以可以想想用groupby先分组,按照月份分组,就可以实现想要的效果了!

代码如下:

cakes.groupby(cakes['Date'].apply(lambda x:x.strftime('%Y/%m'))).sum() 
# 每年每个月份分别求和
# df['日期'].apply(lambda x:x.strftime('%Y/%m')) 
# 将日期格式设置为年月
# df.groupby(df['日期'].apply(lambda x:x.strftime('%Y/%m')))  
# 按照年月groupby

上面还设置到了DataFrame中设置日期格式的函数strftime()

这次关于DataFrame的相关操作就分享到这儿了,等遇到实际的题再更后续吧。

相关文章
|
8天前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
29 0
|
2月前
|
数据采集 数据挖掘 数据处理
使用Python和Pandas进行数据分析基础
使用Python和Pandas进行数据分析基础
56 5
|
2月前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
67 0
|
2月前
|
数据采集 数据挖掘 Python
Python:pandas做爬虫
Python:pandas做爬虫
31 0
|
2天前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
10 2
|
10天前
|
数据采集 数据可视化 数据处理
如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`)
本文介绍了如何使用Python实现一个交易策略。主要步骤包括:导入所需库(如`pandas`、`numpy`、`matplotlib`),加载历史数据,计算均线和其他技术指标,实现交易逻辑,记录和可视化交易结果。示例代码展示了如何根据均线交叉和价格条件进行开仓、止损和止盈操作。实际应用时需注意数据质量、交易成本和风险管理。
29 5
|
9天前
|
存储 数据挖掘 数据处理
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第26天】Python 是数据分析领域的热门语言,Pandas 库以其高效的数据处理功能成为数据科学家的利器。本文介绍 Pandas 在数据读取、筛选、分组、转换和合并等方面的高效技巧,并通过示例代码展示其实际应用。
20 1
|
30天前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
45 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
1月前
|
机器学习/深度学习 并行计算 大数据
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
【Python篇】深入挖掘 Pandas:机器学习数据处理的高级技巧
64 3
|
1月前
|
数据采集 数据挖掘 大数据
【Python篇】详细学习 pandas 和 xlrd:从零开始
【Python篇】详细学习 pandas 和 xlrd:从零开始
54 2