pandas
1. 带标签的Series
-
import pandas as pd
-
import numpy as np
-
-
-
-
s = pd.Series([1,3,6,np.nan,44,1])
-
print(s)
-
-
s = pd.Series([1,3,6,np.nan,44,1],index=[3,4,3,7,8,9])
-
print(s)
-
-
2. 构建DataFrame
-
dates = pd.date_range('2018-08-19',periods=6)
-
-
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d'])
-
print(df)
-
-
# dates = pd.date_range('2018-08-19',periods=6) 与 dates = pd.date_range('2018-08-19','2018-08-24')等价,第二种方法直接表示起始、结束。
-
# numpy.random.randn(d0, d1, …, dn)是从标准正态分布中返回一个或多个样本值。
-
# numpy.random.rand(d0, d1, …, dn)的随机样本位于[0, 1)中。
-
# (6,4)表示6行4列数据
-
# DataFrame既有行索引也有列索引, 它可以被看做由Series组成的大字典。
-
print(df['b'])
-
-
# 打印b列数据,其中包括了行索引
-
df1 = pd.DataFrame(np.arange(12).reshape(3,4))
-
print(df1)
-
-
# 未指定行标签和列标签的数据时,默认行、列标签为从0开始的数字索引。
-
df2 = pd.DataFrame({
-
'A': [1,2,3,4],
-
'B': pd.Timestamp('20180819'),
-
'C': pd.Series([1,6,9,10],dtype='float32'),
-
'D': np.array([3] * 4,dtype='int32'),
-
'E': pd.Categorical(['test','train','test','train']),
-
'F': 'foo'
-
})
-
print(df2)
-
-
# 这是另一种方式表示DataFrame
-
# .Timestamp获得时间戳,这里有隐藏的时间戳,因为显示长度不够,所以部分被隐藏了
-
# [3] * 4 表示数组中有3个4,与[3,3,3,3]等价
-
print(df2.index)
-
-
# 打印df2的行索引
-
print(df2.columns)
-
-
# 打印df2的列索引
-
print(df2.values)
-
-
# 打印df2中的值
-
print(df2.describe())
-
-
# 将df2中的数据(这里只有A、C、D列)总结,总结它们的不重复值、平均值、标准差....
-
df2.T
-
-
# 翻转数据
-
# print(np.transpose(df2))等价于上述操作
-
print(df2.sort_index(axis=1,ascending=True))
-
-
print(df2.sort_index(axis=1,ascending=False))
-
-
# axis=1表示行,axis=0表示列。
-
# ascending=True表示升序,ascending=False表示降序,默认ascending(升序)为True
-
# 上面两行分别表示按行升序与按行降序
-
print(df2.sort_index(axis=0,ascending=False))
-
print(df2.sort_index(axis=0,ascending=True))
-
-
# 表示按列降序与按列升序
-
print(df2.sort_values(by='C',ascending=False))
-
-
-
3. Pandas选择数据
-
import pandas as pd
-
import numpy as np
-
dates = pd.date_range('20180819', periods=6)
-
df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])
-
print(df)
-
print(df['A'])
-
-
# 检索A列
-
print(df.A)
-
-
# 第二种方法,检索A列
-
print(df[0:3])
-
-
# 选择跨越多行或多列
-
# 选取前3行
-
print(df['2018-08-19':'2018-08-21'])
-
-
# 打印第2018-08-19到2018-08-21行之间的数据
-
print(df.loc['20180819'])
-
-
# 根据标签选择数据
-
# 获取特定行或列
-
# 指定行数据
-
print(df.loc[:,'A':'B'])
-
-
# 指定列,这里前面的第一个:表示未指定行,所以打印全部的行
-
print(df.loc[:,['A','B']])
-
-
# 第二种方式,指定列。
-
print(df.loc['20180819',['A','B']])
-
-
# 行与列同时检索
-
print(df.iloc[3,1])
-
-
# 根据序列iloc
-
# 获取特定位置的值
-
print(df.iloc[3:5,1:3])
-
-
# 不包含末尾5或3,同列表切片
-
print(df.iloc[[1,4],1:3])
-
-
# 打印第1行和第4行,第1列至第3列
-
print(df.iloc[[1,2,3],1:3])
-
-
# 打印第1行和第4行以及中间的行,步长为2-1,第1列至第3列
-
print(df.ix[:3,['A','C']])
-
-
# 混合选择,这里的提示说.ix被删除了,建议使用.loc和.iloc
-
print(df.iloc[:3,[0,2]])
-
-
# 结果同上
-
print(df[df.A>8])
-
-
# 通过判断的筛选,A列中大于8的数据为True,再打印这些行
-
print(df.loc[df.A>8])
-
-
# 第二种方法,通过判断的筛选
-
print(df.loc['20180819','A':'B'])
-
print(df.iloc[0,0:2])
-
print(df.ix[0,'A':'B'])
-
-
# 这三种操作,输出结果相同
4. 创建数据
-
import pandas as pd
-
import numpy as np
-
-
dates = pd.date_range('20180820',periods=6)
-
df = pd.DataFrame(np.arange(24).reshape(6,4), index=dates, columns=['A','B','C','D'])
-
print(df)
-
-
# 创建数据
-
df.iloc[2,2] = 111
-
df.loc['20180820','B'] = 2222
-
print(df)
-
-
# 根据位置设置loc和iloc
-
df.B[df.A>4] = 0
-
print(df)
-
-
# 根据条件设置
-
# 更改B中的数,而更改的位置取决于4的位置,当A列中的元素大于4的时候,将B列相应位置的数设置为0
-
df.B.loc[df.A>4] = 0
-
print(df)
-
-
# 第二种方法
-
df['F'] = np.nan
-
print(df)
-
-
# 按行或列设置
-
# 列批处理,F列全改为NaN
-
df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20180820',periods=6))
-
print(df)
-
-
# 添加Series序列(长度必须对齐)
-
df.ix['20180820','A'] = 56
-
print(df)
-
-
# 设定某行某列为特定值
-
#ix 以后要剥离了,尽量不要用了
-
df.loc['20180820','A'] = 67
-
print(df)
-
-
# 第二种方法
-
df.iloc[0,0] = 76
-
print(df)
-
-
# 第三种方法
-
df.iloc[1] = np.nan # df.iloc[1,:]=np.nan
-
print(df)
-
-
# df.iloc[1]相当于df.iloc[1,:]=np.nan,修改一整行数据
-
df.loc['20180820'] = np.nan # df.loc['20180820,:']=np.nan
-
print(df)
-
-
# df.loc['20180820'] = np.nan 相当于 df.loc['20180820,:']=np.nan
-
df.ix[2] = np.nan
-
print(df)
-
-
# df.ix[2] = np.nan 相当于 df.ix[2,:]=np.nan
-
df.ix['20180823'] = np.nan
-
print(df)
-
-
# 第四种方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!