numpy和pandas 小计
#!/usr/bin/python # -*- coding:utf-8 -*- import numpy as np import pandas as pd #用值列表生成 Series 时,Pandas 默认自动生成整数索引 s = pd.Series([1,3,5,np.nan,6,8]) print s #用含日期时间索引与标签的 NumPy 数组生成 DataFrame : dates = pd.date_range('20200901',periods=6) print dates df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD')) print df #用 Series 字典对象生成 DataFrame: df2 = pd.DataFrame({'A': 1., 'B': pd.Timestamp('20130102'), 'C': pd.Series(1, index=list(range(4)), dtype='float32'), 'D': np.array([3] * 4, dtype='int32'), 'E': pd.Categorical(["test", "train", "test", "train"]), 'F': 'foo'}) print df2 #DataFrame 的列有不同数据类型 。 print df2.dtypes #查看 DataFrame 头部和尾部数据: print df.head() print df.tail(2) #显示索引与列名: print df.index print df.columns #可以快速查看数据的统计摘要 print df.describe() print df #转置数据 print df.T #按轴排序 print df.sort_index(axis=1, ascending=False) #按值排序 print df.sort_values(by='B') #选择单列,产生 Series,与 df.A 等效: print df['A'] #用 [ ] 切片行 print df[0:3] #用标签提取一行数据 print df.loc[dates[0]] print df.loc[dates[1]] #用标签选择多列数据 print df.loc[:, ['A', 'B']] #用标签切片,包含行与列结束点 print df.loc['2020-09-01':'2020-09-02', ['A', 'B']] #返回对象降维 print df.loc['2020-09-02', ['A', 'B']] #提取标量值 print df.loc[dates[0], 'A'] print df.loc[dates[1], 'A'] print df.at[dates[0], 'A'] print df.at[dates[1], 'A'] #用整数位置选择 print df print df.iloc[3] #用整数切片 df.iloc[3:5, 0:2] #用整数列表按位置切片 df.iloc[[1, 2, 4], [0, 2]] #显式整行切片 df.iloc[1:3, :] #显式整列切片 df.iloc[:, 1:3] #显式提取值 df.iloc[1, 1] --布尔索引 #用单列的值选择数据 df[df.A > 0] #选择 DataFrame 里满足条件的值 df[df > 0] #用 isin() 筛选 df2 = df.copy() df2['E'] = ['one', 'one', 'two', 'three', 'four', 'three'] df2[df2['E'].isin(['two', 'four'])] --赋值 s1 = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20200901', periods=6)) df['F'] = s1 #按标签赋值 df.at[dates[0], 'A'] = 0 df #按位置赋值 df.iat[0, 1] = 0 df #按 NumPy 数组赋值 df.loc[:, 'D'] = np.array([5] * len(df)) df #用 where 条件赋值: df2 = df.copy() df2[df2 > 0] = -df2 df2 --缺失值 #Pandas 主要用 np.nan 表示缺失数据。 计算时,默认不包含空值 #重建索引(reindex)可以更改、添加、删除指定轴的索引,并返回数据副本,即不更改原数据 df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E']) df1.loc[dates[0]:dates[1], 'E'] = 1 df1 #删除所有含缺失值的行 df1.dropna(how='any') #填充缺失值 df1.fillna(value=5) #提取 nan 值的布尔掩码 pd.isna(df1) --运算 #描述性统计 df.mean() #在另一个轴(即,行)上执行同样的操作 df.mean(1) #不同维度对象运算时,要先对齐。 此外,Pandas 自动沿指定维度广播 shift下移几位 s = pd.Series([1, 3, 5, np.nan, 6, 8], index=dates).shift(2) #pply 函数处理数据 df.apply(np.cumsum) df.apply(lambda x: x.max() - x.min()) --直方图 #直方图 s = pd.Series(np.random.randint(0, 7, size=10)) s.value_counts() --字符串方法 #Series 的 str 属性包含一组字符串处理功能,如下列代码所示。注意,str 的模式匹配默认使用正则表达式 s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat']) s.str.lower() --合并(Merge) 结合(Concat) #Pandas 提供了多种将 Series、DataFrame #对象组合在一起的功能,用索引与关联代数功能的多种设置逻辑可执行连接(join)与合并(merge)操作 df = pd.DataFrame(np.random.randn(10, 4)) pieces = [df[:3], df[3:7], df[7:]] pd.concat(pieces)
天下难事,必作于易;天下大事,必作于细