python数据分析——pandas数据结构2

参考资料:活用pandas库

导入基础数据

# 导入库
import pandas as pd
# 读取数据集
df=pd.read_csv(r"..\data\scientists.csv")
df.head()

1、DataFrame

        DataFrame是Pandas中最常见的对象。可以把它看作python存储电子表格式数据的方式。Series数据结构的许多特征同样存在于DataFrame中。

(1)布尔子集

        我们可以借助布尔向量获取DataFrame的子集。

# 使用布尔向量获取部分数据行
print(df[df["Age"]>df["Age"].mean()])

(2)操作自动对齐和向量化(广播)

        pandas支持广播,广播源自numpy库。它实际描述的是在类数组对象(比如Seires和DataFrame)之间执行操作的效果。这些行为取决于对象的类型、长度以及与对象关联的标签。

        当DataFrame和标量进行运算时,DataFrame中的每个元素会分别和标量进行运算。本例中,df乘2之后,数值会变为原来的两倍,而字符串长度也会翻倍。

# DataFrame和标量相乘
print(df*2)

2、更改Series和DataFrame

(1)添加列

        df中Born和Died列的数据类型是object,表明它们是字符串。可以把字符串转换成合适的datetime类型,这样可以执行常见的日期和时间操作了(例如计算两个日期之差或人的年龄)。如果日期有特定格式,可以提供自定义的格式。

print(df["Born"].dtype)
print(df["Died"].dtype)
# 把Born和Died列格式化为datetime
born_datetime=pd.to_datetime(df["Born"],format="%Y-%m-%d")
died_datetime=pd.to_datetime(df["Died"],format="%Y-%m-%d")
# 增加列
df["born_dt"]=born_datetime
df["died_dt"]=died_datetime
print(df.head())
print(df.shape)
print(df.dtypes)

(2)直接更改列

        random.shuffle方法可以直接作用于序列,实现序列的“洗牌”。当然sample和reset_sample相结合也能实现“洗牌”的效果。

# Age列更改前
print(df.Age)
# 导入random库,用于产生随机数
import random
# 设置随机种子,产生相同的随机数序列
random.seed(42)
random.shuffle(df["Age"])
print(df.Age)

# 使用random_state减少随机化
df["Age"]=df["Age"].sample(len(df.Age),\
                           random_state=24).reset_index(drop=True)

        下面计算年龄,并将日期的差值转换为年

# Died_dt减去Born_dt得到的是天数
df["age_days_dt"]=df["died_dt"]-df["born_dt"]
print(df)
# 使用astype方法把天数转换为年
df["age_days_dt"]=df["age_days_dt"].astype("timedelta64[Y]")
print(df)

(3)删除值

        删除列时,可以使用选取列子集的方法选择所有希望删除的列表,也可以使用DataFrame的drop方法指定要删除的列表。

# 展示当前数据中的所有列
print(df.columns)
# 删除Age列
# 设置参数axis=1,删除列
df_dropped=df.drop(["Age"],axis=1)
# 展示删除指定列之后的列
print(df_dropped.columns)

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值