Pandas Exercises
导入pandas库
import pandas as pd
检查当前pandas版本
print(pd.__version__)
用列表创建 Series
arr = [0, 1, 2, 3, 4]
s1 = pd.Series(arr)
s1
用 ndarray 创建 Series
import numpy as np
# 创建一个随机的数组
# numpy.random.randn 是一个用于生成符合标准正态分布(均值为0,方差为1)的随机数的函数
n = np.random.randn(10)
# 给一维数组 Series 设定索引
index = [\’a\’, \’b\’, \’c\’, \’d\’, \’e\’, \’f\’, \’g\’, \’h\’, \’i\’, \’j\’]
s2 = pd.Series(n, index=index)
s2
用字典创建 Series
dict = {
\’a\’: 1, \’b\’: 2, \’c\’: 3, \’d\’: 4, \’e\’: 5, \’f\’: 6}
s3 = pd.Series(dict)
s3
修改Series 的索引
print(s1)
s1.index = [\’A\’,\’B\’,\’C\’,\’D\’,\’E\’]
s1
合并 Series
# concat 沿着轴(axis)把多个dataframe/series合并成一个,axis默认为0,按行合并,为1按列合并
# pandas.concat(objs, axis=0, join=\’outer\’, ignore_index=False)
# objs:一个列表,内容可以是DataFrame或者Series,可以混合
# join:合并的时候索引的对齐方式,默认outer join,也可以是inner join
# ignore_index:是否忽略掉原来的数据索引
s4 = pd.concat([s1, s3])
s4
Series: 移除元素
print(s4)
# 移除单个元素
s4 = s4.drop(\’f\’)
print(s4)
# 移除多个元素
s4 = s4.drop([\’a\’,\’b\’,\’c\’,\’d\’,\’e\’])
print(s4)
index_to_drop = [\’A\’,\’B\’,\’C\’]
s4 = s4.drop(index_to_drop)
print(s4)
Series: 修改指定索引的元素
s4[\’E\’] = 6
s4
Series: 获取指定索引位置的元素
s4[\’D\’]
Series 切片:取s3的前三个元素
s3[:3]
Series 加法运算
# add()方法将标量值添加到Series中的每个元素,不改变原Series
print(\”\\nSeries after adding a scalar value:\”)
print(s1.add(2))
# 使用add()方法将两个Series相加
# 注意:两个Series相加是根据索引匹配相加,无法匹配索引返回NAN值
print(\”\\nResult of adding two Series:\”)
s5 = s1.add(s4)
print(s5)
# add() 方法还支持填充缺失值或空值
print(\”\\nResult of adding two Series with missing values:\”)
print(s1.add(s5,fill_value=0))
Series 减法运算
# Series.sub(other, level=None, fill_value=None, axis=0)
# other:其他系列或列表类型要从调用者系列中减去。
# fill_value:在系列/列表中被NaN替换的值,然后再进行减法。
# level:在多索引的情况下,level的整数值。
# sub()方法将标量值减到Series中的每个元素,不改变原Series
print(s1.sub(1))
# 使用sub()方法将两个Series相减
# 注意:两个Series相减是根据索引匹配相减,无法匹配索引返回NAN值
s5 = s1.sub(s4)
print(s5)
# sub() 方法还支持填充缺失值或空值
print(s1.sub(s5,fill_value=1))
Series 乘法运算
print(s1.mul(2))
s5 = s1.mul(s4)
print(s5)
print(s1.mul(s5,fill_value=2))
Series 除法运算
print(s1.div(2))
s5 = s1.div(s4)
print(s5)
print(s1.div(s5,fill_value=2))
Series 中位数、均值、求和、最值
print(s1)
# 中位数
print(s1.median())
# 均值
print(s1.mean())
# 求和
print(s1.sum())
# 最值
print(s1.max())
print(s1.min())
用 Numpy 创建 DataFrame
- pandas.date_range(start=None, end=None, periods=None, freq=None, tz=None,normalize=False, name=None, inclusive=\’both\’, unit=None)
- **start:**str,datetime-like,序列起始日期
- **end:**str,datetime-like,序列结束日期
- **periods:**int,None,要生成的时间点数量
- **freq:**str,DateOffset,日期间隔频率(‘B’: 工作日,‘W’: 周,‘M’: 月末,‘T’ 或 ‘min’: 分钟…)
- **tz:**str或pytz.timezone对象,指定时区(如:‘Asia/Shanghai’)
- **normalize:**bool,默认False,如果为True,则所有日期时间标准化到午夜,即时间部分将被忽略
- **name:**str,为生成的 DatetimeIndex 对象指定名称
- **inclusive:**str,默认值为’both’,指定生成日期范围的包容性,可以是 ‘both’(包括起始和结束日期)、‘neither’(不包括起始和结束日期)、‘left’(包括起始日期)、‘right’(包括结束日期)
- **unit:**str 或 None,指定输入的单位(例如 ‘ms’ 表示毫秒)。仅在 start 和 end 为整数时使用
dates=pd.date_range(\’today\’,periods=6) # Define time sequence as index
num_arr=np.random.randn(6,4) # Import numpy random array
columns=[\’A\’,\’B\’,\’C\’,\’D\’] # Use the table as the column name
df1=pd.DataFrame(num_arr,index=dates,columns=columns)
df1
字典创建 DataFrame
data = {
\’animal\’: [\’cat\’, \’cat\’, \’snake\’, \’dog\’, \’dog\’, \’cat\’, \’snake\’, \’cat\’, \’dog\’, \’dog\’],
\’age\’: [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],
\’visits\’: [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],
\’priority\’: [\’yes\’, \’yes\’, \’no\’, \’yes\’, \’no\’, \’no\’, \’no\’, \’yes\’, \’no\’, \’no\’]}
labels = [\’a\’, \’b\’, \’c\’, \’d\’, \’e\’, \’f\’, \’g\’, \’h\’, \’i\’, \’j\’]
df2 = pd.DataFrame(data, index=labels)
df2
查看 DataFrame 的数据类型
df2.dtypes
查看df2表前五行的数据
df2.head()
查看df2表末三行的数据
df2.tail(3)
查看df2表行索引和列索引和值
df2.index
df2.columns
df2.values
查看df2表的统计数据
df2.describe()
实现df2表转置操作
df2.T
df2表实现按年龄大小排序
df2.sort_values(by=\’age\’,ascending=False) #从大到小
DataFrame 切片操作
df2[1:3]
根据标签查询df2表的数据
df2[\’age\’]
df2.age # Equivalent to df2[\’age\’]
根据标签列查询df2表的数据
df2[[\’age\’,\’animal\’]]
根据位置查询df2表的数据
df2.iloc[1:3]
复制df2表的数据
df3 = df2.copy()
df3
判断df3表是否存在空置,存在返回True
df3.isnull()
给df3表增加新列
df3[\’NAN\’] = df3[\’age\’].isnull().astype(int)
df3
基于位置修改表格内的数据
# iat 是 pandas 中用于基于整数位置快速访问DataFrame中单个值的函数,只能访问单个值,比 iloc 更快(专门为标量访问优化),支持读取和赋值
# df.iat[row_index, column_index]
df3.iat[1, 0] = 2
df3
基于标签修改表格内的数据
df3.loc[\’f\’,\’age\’] = 1.5
df3
DataFrame 的统计函数应用
# 均值
print(df3.mean(numeric_only=True))
# 求和
print(df3[\’visits\’].sum())
大小写字符转换
string = pd.Series([\’A\’,\’B\’,\’C\’,\’Aaba\’, \’Baca\’, np.nan, \’CABA\’, \’dog\’, \’cat\’])
print(string)
print(string.str.lower())
print(string.str


