Pandas的数据类型
Pandas基于两种数据类型: series 与 dataframe 。
Series
一个series是一个一维的数据类型,其中每一个元素都有一个标签。类似于Numpy中元素带标签的数组。其中,标签可以是数字或者字符串。
import numpy as np
import pandas as pd
s = pd.Series([1, 2, 5, np.nan, 6, 8])
print s
DataFrame
一个dataframe是一个二维的表结构。Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项。
创建日期索引序列
import pandas as pd dates = pd.date_range(‘20170817‘, periods=7)
结果
此时会产生一个日期序列 从2017-08-17开始,产生7个连续的日期
DatetimeIndex([‘2017-08-17‘, ‘2017-08-18‘, ‘2017-08-19‘, ‘2017-08-20‘,‘2017-08-21‘, ‘2017-08-22‘, ‘2017-08-23‘], dtype=‘datetime64[ns]‘, freq=‘D‘)
创建Dataframe,其中 index 决定索引序列,columns 决定列名[传入列表]
import pandas as pd import numpy as np dates = pd.date_range(‘20170817‘, periods=7) df = pd.DataFrame(np.random.randn(7,4), index=dates, columns=[‘A‘,‘B‘,‘C‘,‘D‘])
结果
此时会在Dataframe对象里插入7行每行4个随机数(7和4都是由index,columns的长度决定)
A B C D 2017-08-17 -1.056218 0.131798 -0.131886 1.138259 2017-08-18 1.699503 2.494435 1.246487 0.743047 2017-08-19 -0.803859 0.911608 -0.858777 -1.790395 2017-08-20 -0.314994 0.848343 -0.563583 0.337760 2017-08-21 2.139696 -1.633749 1.210869 0.950425 2017-08-22 0.480713 -0.215890 -0.342616 -0.015152 2017-08-23 0.063328 -1.522219 -0.132829 1.352349
选择/切片
选择单独的一列,返回 Serires,与 df.A 效果相当。
df[‘A‘]
注意
当要输出Dataframe对象的index时候们只能用
df.index
位置切片(行)
df[0:3]
索引切片(整行 由index引出)
df[‘20170817‘:‘20170819‘]
对多个轴同时通过标签进行选择(整列)
df.loc[:,[‘A‘,‘B‘]]
注意
此处不能用
df.loc[:,[‘A‘:‘B‘]]
获得某一个具体位置的数据(传入行 列坐标)
df.loc[dates[0],‘A‘]
df.iloc[1,1]
通过位置进行选择(行)
df.iloc[3]
此时会选择 第4、5行的前两列的数据
df.iloc[3:5,0:2]
此时会选择第2 3 4行的 第1 3列数据
df.iloc[[1,2,3],[0,2]]
条件选择
布尔索引
df[df.A < 0]
获得大于零的项的数值
df[df > 0]
赋值(新增一列,索引需要和对应好 格式一致 否则会Nan)
s1 = pd.Series([1,2,3,4,5,6,7], index=pd.date_range(‘20170817‘, periods=7)) df[‘F‘] = s1
删除所有带有缺省项的行
df1.dropna()
给缺省项赋值
df1.fillna(value=100)
# 根据某一轴的索引进行排序
注意 ascending=True 升序
df.sort_index(ascending=True)
根据某一列的数值进行排序
df.sort_values(‘B‘,ascending=True)
求平均值
df.mean()
指定轴上的平均值
df.mean(1)
合并
使用 concat() 连接 pandas 对象(包左不包右)
df = pd.DataFrame(np.random.randn(10, 4)) pieces = [df[:2], df[3:4]] df2=pd.concat(pieces)
追加
在 dataframe 数据后追加行
df = pd.DataFrame(np.random.randn(8, 4), columns=[‘A‘,‘B‘,‘C‘,‘D‘]) s = df.iloc[3] df2=df.append(s, ignore_index=True)
ignore_index=True 即:保持原来的index
分组
分组常常意味着可能包含以下的几种的操作中一个或多个
1.依据一些标准分离数据
2.对组单独地应用函数
3.将结果合并到一个数据结构中
df = pd.DataFrame({‘A‘: [‘foo‘, ‘bar‘, ‘foo‘, ‘bar‘, ‘foo‘, ‘bar‘, ‘foo‘, ‘foo‘], ‘B‘: [‘one‘, ‘one‘, ‘two‘, ‘three‘, ‘two‘, ‘two‘, ‘one‘, ‘three‘], ‘C‘: np.random.randn(8), ‘D‘: np.random.randn(8)})
# 对单个分组应用函数,数据被分成了 bar 组与 foo 组,分别计算总和。
df.groupby(‘A‘)[‘C‘].sum() # 只显示C df.groupby(‘A‘).sum() # 显示所有
# 依据多个列分组会构成一个分级索引
df.groupby([‘A‘, ‘B‘]).sum()
文件存储
# 从 csv 文件读取数据 pd.read_csv(‘A.csv‘) # 保存到 csv 文件 df.to_csv(‘A.csv‘) # 读取 excel 文件 pd.read_excel(‘A.xlsx‘, ‘Sheet1‘, index_col=None, na_values=[‘NA‘]) # 保存到 excel 文件 df.to_excel(‘A.xlsx‘, sheet_name=‘Sheet1‘)
时间: 2024-08-04 12:34:16