Pandas知识点用法总结

一、Pandas的对象

1. Pandas的Series对象

  • Series和Numpy中array非常类似,相当于是array的改进版,最重要的区别就是Series能够提供显示索引,从而为表结构的行标和列标提供了基础
import numpy as np
import pandas as pd

data = pd.Series([6, 9, 2])
data_1 = np.array([6, 9, 2])
print(data)
print("--------------")
print(data_1)

输出:
0  6
1  9
2  2
dtype: int64
--------------
[6 9 2]

可以看到,series不仅显示了其中包含的元素,同时也显示了元素对应的索引

  • Series和array的最显著区别就在于,NumPy 数组通过隐式定义的整数索引获取数值,而 Pandas的Series对象定义时可以使用显式定义的索引指定index与数值关联。 显式索引的定义让 Series 对象拥有了更强的能力

例如,索引不再仅仅是整数,还可以是任意想要的类型。如果需要,完全可以用字符串定义索引

import pandas as pd

# 利用insex参数,在创建series时设置显式索引a b c
data = pd.Series([8, 3, 2], index=['a', 'b', 'c'])
print(data)
print(data['a'])

输出:
a    8
b    3
c    2
dtype: int64
8
  • 根据索引的名称来索引序列中的某一个元素,和字典非常类似,

    因此,有的时候我们也会称Series为特殊的字典,甚至,我们可以用字典来创建Series对象

    import pandas as pd
    
    pd.Series({2:'a', 1:'b', 3:'c'})
    
    输出:
    2    a
    1    b
    3    c
    dtype: object
    

2. Pandas的Index对象

  • Series 和 DataFrame 对象都使用便于引用和调整的显式索引。

  • 可以将Index 对象看作是一个不可变数组或有序集合(实际上是一个多集,因为 Index 对象可能会包含重复值) ,给Index对象赋值会报错

    ind = pd.Index([2, 3, 5, 7, 11])
    print(ind)
    
    输出:
    Int64Index([2, 3, 5, 7, 11], dtype='int64')
    

3. Pandas的DataFrame对象

  • DataFrame是二维表结构数据的直接表示,是多个Series共同构成的数据结构,同时也是实际使用Pandas过程中最常用的数据结构。

  • DataFrame的创建方式:

    1. 由Series创建DataFrame

    2. 由array创建DataFrame

    3. 利用字典创建DataFrame

      这3种创建方式都是利用DataFrame函数来创建DataFrame

    df = pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
    

二、DataFrame对象的操作

# 在使用之前,需要导入pandas库
import pandas as pd

1. 导入数据

df = pd.DataFrame({"id": [1001, 1002, 1003, 1004, 1005],
                   "date": pd.date_range('20130102', periods=5),
                   "city": ['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai'],
                   "age": [23, 44, 54, 32, 34],
                   "category": ['100-A', '100-B', '110-A', '110-C', '210-A'],
                   "price": [1200, np.nan, 2133, 5433, np.nan]},
                  columns=['id', 'date', 'city', 'category', 'age']) # 自己创建数据框

pd.read_csv(filename) # 从CSV⽂件导⼊数据

pd.read_table(filename) # 从限定分隔符的⽂本⽂件导⼊数据

pd.read_excel(filename) # 从Excel⽂件导⼊数据

pd.read_sql(query,connection_object) # 从SQL表/库导⼊数据

pd.read_json(json_string) # 从JSON格式的字符串导⼊数据

pd.read_html(url) # 解析URL、字符串或者HTML⽂件,抽取其中的tables表格

2. 查看数据

df.head(n) # 查看DataFrame对象的前n⾏

df.tail(n) # 查看DataFrame对象的最后n⾏

df.shape() # 查看⾏数和列数

df.info() # 数据表基本信息(维度、列名称、数据格式、所占空间等)

df.columns() # 查看字段(⾸⾏)名称

df.columns.values.tolist() # 获取列名列表

df.describe() # 查看数值型列的汇总统计

df.dtypes # 每一列数据的格式

df['B'].dtype # 某一列格式

df.isnull().any() # 查看是否有缺失值

df['B'].isnull() # 查看某一列空值

df[df[column_name].duplicated()] # 查看column_name字段数据重复的数据信息

df[df[column_name].duplicated()].count() # 查看column_name字段数据重复的个数

3. 数据提取

  • 主要用到的三个函数:loc, iloc和ix。

loc函数按标签值进行提取,iloc按位置进行提取,ix可以同时按标签和位置进行提取。

In[1]: data
Out[1]: 
    A   B   C   D
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15

# 1.用loc、iloc提取行数据

#取索引为'a'的行
data.loc['a']
输出:
A    0
B    1
C    2
D    3
 
#取第一行数据(索引为'a'的行就是第一行,所以结果相同)
data.iloc[0]
输出:
A    0
B    1
C    2
D    3

# 2.用loc、iloc提取列数据

#取'A'列所有行,多取几列格式为 data.loc[:,['A','B']]
data.loc[:,['A']] 
输出: 
    A
a   0
b   4
c   8
d  12

#取第0列所有行,多取几列格式为 data.iloc[:,[0,1]]
data.iloc[:,[0]] 
输出:
    A
a   0
b   4
c   8
d  12

# 3. 用loc、iloc提取指定行、指定列数据

#提取index为'a','b',列名为'A','B'中的数据
ata.loc[['a','b'],['A','B']] 
输出:
   A  B
a  0  1
b  4  5

#提取第0、1行,第0、1列中的数据
data.iloc[[0,1],[0,1]] 
输出: 
   A  B
a  0  1
b  4  5

# 4. 用loc、iloc提取所有数据

#取A,B,C,D列的所有行
data.loc[:,:] 
输出: 
    A   B   C   D
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15

#取第0,1,2,3列的所有行
data.iloc[:,:] 
输出: 
    A   B   C   D
a   0   1   2   3
b   4   5   6   7
c   8   9  10  11
d  12  13  14  15

# 5. 用loc函数,根据某个数据来提取数据所在的行

#提取data数据(筛选条件: A列中数字为0所在的行数据)
data.loc[data['A']==0] 
输出:  
   A  B  C  D
a  0  1  2  3

# 6. ix
df.ix[[:5],["col1","col2"]] # 返回字段为col1和col2的前5条数据
  • 注意:用loc函数的时候,当index相同时,会将相同的Index全部提取出来

4. 数据处理

df.fillna(value=x) # ⽤x替换DataFrame对象中所有的空值

df[column_name].fillna(x) # ⽤x替换column_name列中所有空值

df.dropna() # 删除所有包含空值的⾏

df.dropna(axis=1) # 删除所有包含空值的列

pd.isnull() # 检查DataFrame对象中的空值,并返回⼀个Boolean数组

pd.notnull() # 检查DataFrame对象中的⾮空值,并返回⼀个Boolean数组

df.rename(columns=lambdax:x+1) # 批量更改列名

df.rename(columns={'old_name':'new_ name'}) # 选择性更改列名

df.rename(index=lambdax:x+1) # 批量重命名索引

df['city'].drop_duplicates() # 删除后出现的重复值

df['city'].drop_duplicates(keep='last') # 删除先出现的重复值

df_inner.sort_values(by=['age']) # 按照特定列的值排序

df_inner.sort_index() # 按照索引列排序

df.groupby(col) # 返回⼀个按列col进⾏分组的Groupby对象

df.groupby([col1,col2]) # 返回⼀个按多列进⾏分组的Groupby对象

data.apply(np.mean) # 对DataFrame中的每⼀列应⽤函数np.mean

data.apply(np.max,axis=1) # 对DataFrame中的每⼀⾏应⽤函数np.max

5. 数据表合并

# 数据表合并:merge join append concat

# 将df2中的⾏添加到df1的尾部
df1.append(df2) 

# 将df2中的列添加到df1的尾部,值为空的对应⾏与对应列都不要
pd.concat([df1,df2],axis=1,join='inner') 

# 对df1的列和df2的列执⾏SQL形式的join,默认按照索引来进⾏合并,如果df1和df2有共同字段时,会报错,可通过设置lsuffix,rsuffix来进⾏解决,如果需要按照共同列进⾏合并,就要⽤到set_index(col1)
df1.join(df2.set_index(col1),on=col1,how='inner') 

# 对df1和df2合并,按照col1,⽅式为outer
pd.merge(df1,df2,on='col1',how='outer') 

#与 df1.join(df2, how='outer')效果相同
pd.merge(df1,df2,left_index=True,right_index=True,how='outer') 

房价中用到:
all_features = pd.concat((train_data.iloc[:, 0:-1], test_data.iloc[:, 0:]))

6. 导出数据

df.to_csv(filename) #导出数据到CSV⽂件

df.to_excel(filename) #导出数据到Excel⽂件

df.to_sql(table_name,connection_object) #导出数据到SQL表

df.to_json(filename) #以Json格式导出数据到⽂本⽂件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值