python数据分析(五)——pandas数据的合并和分组聚合

本文详细介绍了Python数据分析中的关键步骤,包括Series和DataFrame的使用、pandas处理缺失值、数据合并(join和merge)、数据分组与聚合以及索引和复合索引的操作。通过实例演示了如何离散化字符串、合并数据、统计电影分类和星巴克店铺数据等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录
python数据分析(一)——series和读取外部数据
python数据分析(二)——DataFrame
python数据分析(三)——pandas缺失值处理
python数据分析(四)——pandas常用统计方法



前言

对于这一组电影数据,希望统计电影分类(genre)的情况,应该如何处理数据?

思路:重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1


一、字符串离散化实例

代码如下(示例):

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from matplotlib.font_manager import FontProperties

font = FontProperties(fname="/System/Library/Fonts/Supplemental/Songti.ttc", size=14)

df = pd.read_csv("./IMDB-Movie-Data.csv")

temp_list = list(df["Genre"].str.split(","))  # [[], [], []]
# print(temp_list)
genre_list = list(set([i for j in temp_list for i in j]))

# 构造全为0的数组
zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list)

# print(zeros_df)

# 给每个电影出现分类的位置赋值1
for i in range(df.shape[0]):
    # zeros_df.loc[0, ["Sci-fi", "Musical"] = 1
    # loc[index, columns]第一个参数为索引,第二个参数为列
    # iloc[index]只接受索引,不接受列参数
    zeros_df.loc[i, temp_list[i]] = 1

# 统计每个分类的电影的数量和
genre_count = zeros_df.sum(axis=0)
# print(zeros_df)

# 排序
genre_count = genre_count.sort_values(ascending=False)

# 画图
plt.figure(figsize=(20, 8), dpi=80)
_x = genre_count.index
_y = genre_count.values
plt.bar(range(len(_x)), _y, width=0.5)

plt.xticks(range(len(_x)), _x, rotation=45, fontproperties=font)
plt.yticks(range(0, 520, 100), fontproperties=font)

plt.xlabel("种类", fontproperties=font)
plt.ylabel("数量", fontproperties=font)

plt.show()

二、数据合并join:行索引

join:默认情况下是把行行索引相同的数据合并在一起,按照对应的行索引合并

数据合并 行索引

In [18]: t1 = pd.DataFrame(np.ones((2, 4)), index=list("AB"),columns=list("abcd"))
In [19]: t1
Out[19]: 
     a    b    c    d
A  1.0  1.0  1.0  1.0
B  1.0  1.0  1.0  1.0

In [20]: t2 = pd.DataFrame(np.zeros((3, 3)), index=list("ABC"),columns=list("xyz"))
In [21]: t2
Out[21]: 
     x    y    z
A  0.0  0.0  0.0
B  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值