导图社区 10分钟入门Pandas大纲视图
按Pandas中文网的《10分钟入门》教程做的导图,内容实在庞杂,一张图获取可以能更快的了解pandas的大体架构。
编辑于2022-05-18 22:55:54Pandas入门功能
1.生成对象
Series
用值列表生成
pd.Series([1,3,4,np.nan,6,8])
DataFrame
含时间索引与标签的numpy数组生成
1.生成日期对象(.date_range())
2.生成数据对象(.DataFrame(值,行,列))
用Series字典生成
pd.DateFarme({列 : 行或值 } )
2.查看数据
头部
df.head()
尾部
df.tail(3)
索引
df.index
列名
df.columns
转置
df.T
转换为numpy对象
df.to_numpy()
统计摘要
df.describe()
按轴排序
df.sort_index(axias=1, ascending=False)
按值排序
df.sort_values(by='B')
3.选取数据
主要方法
.iat
.at
.iloc
.loc
生产环境使用
常规用法
单列
df['A']
切片
df[0:3]
df['20220514':'20220517']
按标签: .loc
切片,设置行列结束点
df.loc['20220514':'20220517', ['A', 'B']]
切片:单行单列
df.loc[dates[0], 'A']
df.at[dates[0],'A']
切片:单行多列
df.loc['20220514', ['A','B']]
取单行
df.loc[dates[0]]
取多行
df.loc[:,['A','B']]
.loc[[行标签列表], [列标签列表]] - 形参都是列表,输出DataFrame对象 - 形参有具体值,输出Series/numpy对象 - 形成全是值,输出Value值
按位置: .iloc
用整数取单行
df.iloc[3]
用整数切片取
df.iloc[3:5, 0:2]
df.iloc[[1,2,4], [3,5]]
显式取整行
df.iloc[1:3, :]
显示取整列
df.iloc[:, 1:3]
取单个值
df.iloc[1,3]
df.iat[1, 3]
有点同上
赋值
用索引自动对齐列
df['F'] = pd.Series([1, 2, 3, 4, 5, 6], index=pd.date_range('20220515', periods=6))
按标签
df.at[dates[0],'A'] = 0 # 第1行,第2列
按位置
df.iat[0,1] = 0 # 第1行,第2列
用Numpy数组赋值
df.loc[:, 'D'] = np.array([5]*len(df)) # 用np数组赋值
用where判断后赋值
df4[df4 > 0] = -df4
4.缺失
重构时的缺失
df5 = df.reindex(index=dates[0:4], columns= list(df.columns) + ['E']) df5.loc[dates[0]:dates[1], 'E'] = 1
删除含Nan的行
df5.dropna(how='any')
填充缺失值
df5.fillna(value=5)
提取na的布尔掩码
pd.isna(df5)
13.输入/输出
CSV
df.to_csv('test.csv')
pd.read_csv('test.csv')
HDF5
df.to_hdf('foo.h5', 'df')
pd.read_hdf('foo.h5', 'df')
Excel
df.to_excel('test.xlsx', sheet_name='pandas')
pd.read_excel('test.xlsx', 'pandas', index_col = None, na_values=['NA'])
12.可视化
单个时间序列
ts = pd.Series(np.random.randn(1000),index=pd.date_range('1/1/2000', periods=1000)) ts = ts.cumsum() ts.plot()
N个时间序列
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=['A', 'B', 'C', 'D']) df = df.cumsum() plt.figure() df.plot() plt.legend(loc='best')
11.类别型
指定已存在的列为类别
df['grade'] = df['raw_grade'].astype('category')
用有含义的名字命名不同的类型
df['grade'].cat.categories= ['very good','good', 'bad']
重新排序类别
df['grade'] = df['grade'].cat.set_categories(['very bad', 'bad', 'medium', 'good', 'very good'])
10.时间序列
频率
ts.resample('5Min').sum()
时区
设置
ts_utc = ts.tz_localize('UTC')
转换
ts_utc.tz_convert('US/Eastern')
时间段
日期转月份
ps = ts.to_period()
日期转时间戳
ps.to_timestamp()
9.数据透视
Piovt Tables
pd.pivot_table(df,values='D',index= ['A', 'B'], columns= 'C')
8.重塑
堆叠stack
stacked = df.stack()
stacked.unstack()
7.分组
df.groupby('A').sum()
df.groupby(['A','B']).sum()
6.合并
结合concat
pieces = [df[:3], df[7:]] pd.concat(pieces)
连接join
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]}) right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]}) pd.merge(left, right, on = 'key')
追加append
后续版本要删掉了
5.运算
二进制操作
统计
df.mean(0)
df.mean(1)
s = pd.Series([1,3,5, np.nan, 6, 8], index = dates).shift(2)
Apply函数
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()
字符串方法
s.str.lower()
Pandas中文网:10分钟入门大纲