pandas(2)

把字符串离散化

  1. 获取字符串去重后的列表
  2. 构造全为0的数组,columns为字符串的列表
  3. 给全为0的数组赋值,遍历

 举个例子

# coding=utf-8
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

file_path = "./IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
# print(df["Genre"].head(3))

# 统计分类的列表
temp_list = df["Genre"].str.split(",").tolist()  # [[],[],[]]列表嵌套列表
# print(temp_list)
genre_list = list(set([i for j in temp_list for i in j]))
# print(genre_list)

# 构造全为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","Mucical"]] = 1
    zeros_df.loc[i, temp_list[i]] = 1

# print(zeros_df.head(3))

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

# 排序
genre_count = genre_count.sort_values()
_x = genre_count.index
_y = genre_count.values

#画图
plt.figure(figsize=(20, 8), dpi=80)
plt.barh(range(len(_x)), _y, height=0.4, color="orange")
plt.yticks(range(len(_x)), _x)
plt.show()

数据合并

join

默认情况下把行索引相同的数据合并到一起

merge

按照指定的列把数据按照一定的方式合并在一起

# 内连接,交集
t1.merge(t2, on="a", how='inner')

# 外连接,并集
t1.merge(t2, on="a", how='outer')

# 以t1为准
t1.merge(t2, on="a", how='left')

# 以t2为准
t1.merge(t2, on="a", how='right')

# 当两个数组列标签不同时
t1.merge(t2, left_on="a", right_on="b", how='right')

分组和聚合

df.groupby(by="")

得到grouped对象,能够调用聚合方法,能够遍历

 grouped中的每一个元素是一个元组,元组的结构(索引(分组的值),分组之后的DataFrame)

df.groupby(by="").mean()

df.groupby(by="").count()

带复合索引的DataFrame

grouped = df.groupby(by=[df["Country"],df["State/Province"]])

获取分组后的某一部分数据

df.groupby(by=["Country","State/Province"])["Country"].count()

 对某几列数据进行分组

df["Country"].groupby(by=[df["Country"],df["State/Province"]]).count()

 下面这两行的效果一样,与上面那行不同,这两行返回的是DataFrame类型

t1 = df[["Country"]].groupby(by=[df["Country"],df["State/Province"]]).count()
t2 = df.groupby(by=["Country","State/Province"])[["Country"]].count()

索引

获取索引

df.index

设置索引的值

df.index = ["a", "c"]

重新设置索引

df.reindex(list("abcedf"))

设置某一列为索引

df.set_index("a", drop=False)
# drop为False表示之前列充当索引的列名称依然保存

 返回index的唯一值unique

df.set_index("Country").index.unique()

从复合索引中取值

Series

s1["a"]["b"]
s1["a", "b"]

比如 

a = pd.DataFrame({'a': range(7),'b': range(7, 0, -1),'c':['one','one','one','two','two','two', 'two'],'d': list("hjklmno")})

DataFrame

df.loc["a"].loc["b"]

从里层索引开始选择

交换里外层索引的位置

df.swaplevel()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值