pandas(本人复习记录)

发布于:2022-10-21 ⋅ 阅读:(326) ⋅ 点赞:(0)

目录

pandas

生成DataFrame

用Series字典对象生成DataFrame

读取数据

1.读取CSV数据

2.读取Excel数据

查看数据

转换数据格式

检查数据

pandas 部分优势

pandas常常和numpy一起使用


pandas

生成DataFrame

import pandas as pd
import numpy as np

data = pd.data_range('2022-10-01', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=datas, columsn=list('ABCD'))


                A         B         C         D
2013-01-01  0.469112 -0.282863 -1.509059 -1.135632
2013-01-02  1.212112 -0.173215  0.119209 -1.044236
2013-01-03 -0.861849 -2.104569 -0.494929  1.071804
2013-01-04  0.721555 -0.706771 -1.039575  0.271860
2013-01-05 -0.424972  0.567020  0.276232 -1.087401
2013-01-06 -0.673690  0.113648 -1.478427  0.524988

用Series字典对象生成DataFrame

df = 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'})
    
    A      B        C   D     E    F
0  1.0 2013-01-02  1.0  3   test  foo
1  1.0 2013-01-02  1.0  3  train  foo
2  1.0 2013-01-02  1.0  3   test  foo
3  1.0 2013-01-02  1.0  3  train  foo

df.dtype    #  DataFrame 的列有不同数据类型
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object

读取数据

1.读取CSV数据

data=pd.read_csv('data.csv')

data=pd.read_csv('data.csv',names=['A','B','C'])    #  指定name参数,给列表的不同列命名

data=pd.read_csv('data.csv',index_col='2022年')    #  指定行索引

data=pd.read_csv('data.csv',na_values=[123])    #  把第0行的123变成nan

data.to_csv('test/out1.csv')    #  将文件保存当前目录下的test文件夹下的out1.csv文件中

2.读取Excel数据

#打开excel数据表
data=pd.ExcelFile("data.xlsx")
#使用read_excel方法来读取打开的EXCEL中的Sheet表
#并且设置行索引为分数
gdp1=pd.read_excel(data,'Sheet1',index_col="分数")

data.to_excel('test/out1.excel')

查看数据

dates = pd.date_range('20221001', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))

df['E'] = ['one', 'one', 'two', 'three', 'four', 'three']

print(df)
                   A         B         C         D      E
2013-01-01 -0.611989  0.120009  0.229388  1.686356    one
2013-01-02  0.632596 -0.206963  0.406610 -0.172598    one
2013-01-03  0.904194 -0.142490 -1.192002  0.839056    two
2013-01-04 -0.487144 -0.024364 -0.354199  1.114304  three
2013-01-05 -0.053873 -0.073507  0.442857  1.399136   four
2013-01-06 -0.101276 -1.374752  0.916079  0.357211  three


print(df[df['E'].isin(['two', 'three'])])
                   A         B         C         D      E
2013-01-03  0.904194 -0.142490 -1.192002  0.839056    two
2013-01-04 -0.487144 -0.024364 -0.354199  1.114304  three
2013-01-06 -0.101276 -1.374752  0.916079  0.357211  three

df(head(2))    #  查看前两行数据
df(hail(3))    #  查看后三行数据
df.index    #  显示索引
df.columns    #  显示列名
df.describe()    #  查看数据的统计摘要
df.T    #  转置
df.sort_index(axis=1,ascending=False)    #  按轴排序
df.sort_values(by='B')    #  按值排序
df.loc['20130102', ['A', 'B']]    #  返回对象降维

转换数据格式

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df.to_numpy())

DataFrame.to_numpy() 输出底层数据的 NumPy 对象。

df中类型越多,DataFrame.to_numpy() 操作就会耗费较多资源。

这也是 Pandas 和 NumPy 的本质区别:NumPy 数组只有一种数据类型,DataFrame 每列的数据类型各不相同。

检查数据

  • 查看一列的一些基本统计信息:data.columnname.describe()

  • 选择一列:data['columnname']

  • 选择一列的前几行数据:data['columnsname'][:n]

  • 选择多列:data[['column1','column2']]

pandas 部分优势

  • 处理浮点与非浮点数据里的缺失数据,表示为 NaN;

  • 大小可变:插入或删除 DataFrame 等多维#对象的列;

  • 自动、显式数据对齐:显式地将对象与一组标签对齐,也可以忽略标签,在 Series、DataFrame 计算时自动与数据对齐;

  • 强大、灵活的分组(group by)功能:拆分-应用-组合数据集,聚合、转换数据;

  • 把 Python 和 NumPy 数据结构里不规则、不同索引的数据轻松地转换为 DataFrame 对象;

  • 基于智能标签,对大型数据集进行切片、花式索引、子集分解等操作;

  • 直观地合并(merge)、**连接(join)**数据集;

  • 灵活地重塑(reshape)、**透视(pivot)**数据集;

pandas常常和numpy一起使用

import pandas as pd
import numpy as np


df = pd.DataFrame(pd.read_csv('name', header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))

df.to_csv('excel_to_python.csv')
df.to_excel('excel_to_python.xlsx')
df.corr()    #  表的相关性分析
df.shape    #  查看维度
df.info()    #  查看数据表基本
df.dtype    #  查看每一列数据格式
df['B'].dtype    #  查看某一列数据格式
df.isnull()    #  查看空值
df['B'].isnull()    #  查看某列空值
df['B'].unique()    #  查看某列唯一值
df.values    #  查看数据表的值
df.columns    #  查看列名
df.head()    #  查看数据前五行
df.tail()    #  查看数据后五行
df.fillna(value=0)    #  用0填充空值
df['prince'].fillna(df['prince'].mean())    #  用prince均值填充空值
df['city'] = df['city'].str.lower()    #  大小写转换
df['price'].astype('int')    #  转换数据格式
df.rename(columns={'category', 'category-size'})    #  更改列名
df['city'].drop_duplicates()    #  删除后出现的重复值
df['city'].drop_duplicates(keep='last')    #  删除先出现的重复值
df['city'].replace('sh', 'shanghai')    #  数据替换
pd.concat(objs, axis=0, join='outer', join_axes=None, 
ignore_index=False,keys=None, levels=None, 
names=None, verify_integrity=False,copy=True)

result = pd.concat([df1, df2, df3])    #  合并df1,df2,df3
df.set_index('id')    #  设置索引列
df.sort_values(['age'])    #  按照age排序
df.sort_index()    #  按照索引列排序
#  loc函数按标签值进行提取
#  iloc按位置进行提取
#  ix可以同时按标签和位置进行提取
df.loc[3]    #  按照索引提取单行数值
df.iloc[0:5]    #  提取区域行数值
df.ix[: '2013-01-03', :4]    #  2013-01-03之前的前四列数据
df['city'].isin(['beijing'])    #  判断city是否是beijing
df['city'].isin(['beijing','shanghai'])    #  city中是否有beijing,shanghai
#  与 或 非
#  &  
df.loc[(df['age'] > 25) & (df['city'] == 'beijing'), ['id','city','age','category','gender']]
#  |
df.loc[(df['age'] > 25) | (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age'])
#  !=
df.loc[(df['age'] > 25) != (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['id'])
#  对筛选的数据按照city列进行计数
df.loc[(df['age'] > 25) != (df['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count()
#  query 函数筛选
df.query("city == ['beijing', 'shanghai']")    
#  筛选后的结果按照prince求和
df.query('city == ["beijing", "shanghai"]').prince.sum()
#  对所有列进行计数
df.groupby('city').count()
#  按照city对id进行计数
df.groupby('city')['id'].count()
#  对两个字段进行汇总计数
df groupby('city', 'size')['id'].count()
df.groupby('city')['prince'].agg([np.sum, np.mean])