print('创建 DataFrame 数据类型')
#DataFrame 可以存在多列数据。一般情况下,DataFrame 也更加常用。
print('/**********通过 NumPy 数组创建 DataFrame*************/')
dates=pd.date_range('today',periods=6)#定义时间序列作为index
num_arr=np.random.randn(6,4)#传入numpy随机数组
columns=['A','B','C','D']#将列表作为列名
df1=pd.DataFrame(num_arr,index=dates,columns=columns)
print(df1)
print('/********** 通过字典数组创建 DataFrame**************/')
data={'animal':['cat','cat','snake','dog','dog','cat','snake','cat','dog','dog'],
'age':[2.5,3,1,np.nan,4,3,0.5,np.nan,6,2],
'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)
print(df2)
print('/**********查看 DataFrame 的数据类型***********/')
print(df2.dtypes)
print('/***********预览 DataFrame 的前 5 行数据*************/')
print(df2.head())# 默认为显示 5 行,可根据需要在括号中填入希望预览的行数
print('/**********查看 DataFrame 的后 3 行数据**************/')
print(df2.tail(3))
print('/**********查看 DataFrame 的索引******************/')
print(df2.index)
print('/**********查看 DataFrame 的列名****************/')
print(df2.columns)
print('/********** 查看 DataFrame 的数值**************/')
print(df2.values)
print('/*********查看 DataFrame 的统计数据**************/')
print(df2.describe())
print('/********* DataFrame 转置操作**************/')
print(df2.T)
print('/**********对 DataFrame 进行按列排序*************/')
print(df2.sort_values(by='age'))
print('/********** 对 DataFrame 数据切片***************/')
print(df2[1:3])
print('/*********对 DataFrame 通过标签查询(单列)*************/')
print(df2['age'])
print(df2.age)
print('/*********对 DataFrame 通过标签查询(多列***************/')
print(df2[['age','animal']])
print('/*********对 DataFrame 通过位置查询¶*************/')
print(df2.iloc[1:3])
print('/*********DataFrame 副本拷贝¶*************/')
# 生成 DataFrame 副本,方便数据集被多个不同流程使用
df3=df2.copy()
print(df3)
print('/********* 判断 DataFrame 元素是否为空****************/')
print(df3.isnull())# 如果为空则返回为 True
print('/**********添加列数据**************/')
num=pd.Series([0,1,2,3,4,5,6,7,8,9],index=df3.index)
df3['No.']=num # 添加以 'No.' 为列名的新数据列
print(df3)
print('/**********根据 DataFrame 的下标值进行更改***************/')
# 修改第 2 行与第 1 列对应的值
# 索引序号从 0 开始,这里为 1, 0
df3.iat[1,0]=5
print(df3)
print('/**********根据 DataFrame 的标签对数据进行修改****************/')
df3.loc['f','age']=1.5
print(df3)
print('/**********DataFrame 求平均值操作****************/')
print(df3.mean())
print('/**********对 DataFrame 中任意列做求和操作****************/')
print(df3['visits'].sum())
print('/DataFrame 缺失值操作/')
print('/***********对缺失值进行填充**************/')
df4=df3.copy()
print(df4)
print(df4.fillna(value=2))
print('/***********删除存在缺失值的行*************/')
df5=df3.copy()
print(df5)
print(df5.dropna(how='any')) # 任何存在 NaN 的行都将被删除
print('/***********DataFrame 按指定列对齐***************/')
left=pd.DataFrame({'key':['foo1','foo2'],'one':[1,2]})
right=pd.DataFrame({'key':['foo2','foo3'],'two':[4,5]})
print(left)
print(right)
print(pd.merge(left,right,no='key'))# 按照 key 列对齐连接,只存在 foo2 相同,所以最后变成一行
print('/DataFrame 文件操作/')
print('/**********CSV 文件写入****************/')
df3.to_csv('xxx.csv')
print('/**********CSV 文件读取*************/')
df_animal=pd.read_csv('xxx.csv')
print('/**********Excel 写入操作****************/')
df3.to_excel('xxx.xlsx',sheet_name='Sheet1')
print('/**********Excel 读取操作¶****************/')
pd.read_excel('xxx.xlsx','Sheet1',index_col=None,na_values=['NA'])
print('/DataFrame 多重索引/')
print('/************根据多重索引创建 DataFrame************/')
# 创建一个以 letters = ['A', 'B'] 和 numbers = list(range(6))为索引,值为随机数据的多重索引 DataFrame。
frame=pd.DataFrame(np.arange(12).reshape(6,2),
index=[list('AAABBB'),list('123123')],
columns=['hello','shiyanlou'])
print(frame)
print('/************多重索引设置列名称************/')
frame.index.names=['first','second']
print(frame)
print('/************ DataFrame 多重索引分组求和************/')
print(frame.groupby('first').sum())
print('/************DataFrame 行列名称转换**************/')
print(frame)
print(frame.stack())
print('/************DataFrame 索引转换*************/')
print(frame)
print(frame.unstack())
print('/************ DataFrame 条件查找**************/')
df=pd.DataFrame(data,index=labels)
print(df)
#查找 age 大于 3 的全部信息
print(df[df['age']>3])
print('/*************根据行列索引切片***********/')
print(df.iloc[2:4,1:3])
print('/**************DataFrame 多重条件查询***********/')
#查找 age<3 且为 cat 的全部数据。
df=pd.DataFrame(data,index=labels)
print(df[(df['animal']=='cat')&(df['age']<3)])
print('/************* DataFrame 按关键字查询************/')
print(df[df['animal'].isin('cat','dog')])
print('/**************DataFrame 按标签及列名查询。***********/')
print(df.loc[df.index[[3,4,8]],['animal','age']])
print('/**************DataFrame 多条件排序**********/')
#按照 age 降序,visits 升序排列
print(df.sort_values(by=['age','visits'],ascending=[False,True]))
print('/**************DataFrame 多值替换***********/')
#将 priority 列的 yes 值替换为 True,no 值替换为 False。
print(df['priority'].map({'yes':True,'no':False}))
print('/**************DataFrame 分组求和*********/')
print(df.groupby('animal').sum())
print('/**************使用列表拼接多个 DataFrame************/')
temp_df1=pd.DataFrame(np.random.randn(5,4))
temp_df2=pd.DataFrame(np.random.randn(5,4))
temp_df3=pd.DataFrame(np.random.randn(5,4))
print(temp_df1)
print(temp_df2)
print(temp_df3)
pieces=[temp_df1,temp_df2,temp_df3]
pd.concat(pieces)
print('/**************找出 DataFrame 表中和最小的列************/')
df= pd.DataFrame(np.random.randn(size=(5,10)),columns=list('abcdefghij'))
print(df)
print(df.sum().idxmin())# idxmax(), idxmin() 为 Series 函数返回最大最小值的索引值
print('/**************DataFrame 中每个元素减去每一行的平均值*************/')
df=pd.DataFrame(np.random.randn(size=(5,3)))
print(df)
df.sub(df.mean(axis=1),axis=0)
print('/**************DataFrame 分组,并得到每一组中最大三个数之和************/')
df=pd.DataFrame({'A':list('aaabbcaabcccbbc'),
'B':[12,345,3,1,45,14,4,52,54,23,235,21,57,3,87]})
print(df)
print(df.groupby('A')['B'].nlargest(3).sum(level=0))
pandas-dataframe
最新推荐文章于 2020-11-27 10:03:19 发布