Python的数据处理:创建、舍弃、处理缺失值、文本数据分割、索引、切片方式

数据处理

创建数据

pd.Series(5,index['A'])    # 创建一维数据,索引 自行定义,否则默认从0开始,值 自行定义为5

0    5          # 输出结果
dtype: int64     # 数据类型对象:
pd.Series(5,index=list('abcdef'))   # 根据索引值自动生成增加元素
a    5
b    5
c    5
d    5
e    5
f    5
dtype: int64
b=[1]
pd.Series(b,index=list('abcdef'))  # 索引值与元素个数不对应

ValueError: Length of passed values is 1, index implies 6.    # 报错

a={
    
    'name':['XA','XB','XC'],'age':[8,9,8]}
pd.DataFrame(data=a,index=list('abd'))  # 创建二维数据,索引 自行定义,否则默认从0开始,字典中键自动生成为列名

在这里插入图片描述

用列表构建二维数据

b=[[1,2,3,4],['a','b','c','d']]  # 列表中数据自动变成每行数据
pd.DataFrame(b,columns=list('ABCD'),index=list('xy')) #‘columns’用来定义列名,‘index’用来定义行名,b可以写成data=b

读取数据

import pandas as pd
data_url = "https://pai-public-data.oss-cn-beijing.aliyuncs.com/pokemon/pokemon.csv"     #python填写路径时,要么使用/,要么使用\\
df = pd.read_csv(data_url)   # 读取本地数据时,'data_url'可以直接写成本地文件名
df.head()      # 读取数据前5行
 df.tail()  # 打印数据后5行
 df.columns  #打印列名,'columns'为列名
 df.index  #打印行名,'index'为行名
df.shape #打印维度

axis=0 axis=1的理解

1表示横轴,方向从左到右;0表示纵轴,方向从上到;
当axis=1时,数组的变化是横向的,而体现出来的是列的增加或者减少;

舍弃数据

print df.drop(df.columns[1, 2], axis = 1) #舍弃数据前两列
print df.drop(df.columns[[1, 2]], axis = 0) #舍弃数据前两行

增加列

df ['row'] = 1  #需要赋值,且每次只能增加一列

条件筛选

df[(df['weight']<=70)|(df['weight']>=100)]  
df.loc[(df['weight']<=70)|(df['weight']>=100)]   # 是否加loc,结果相同
df.loc[(df['weight']<=70)|(df['weight']>=100),'flag'] = 'high'  # 创建一个新列‘flag’,并将满足条件的行用‘high’填充
df['flag'].value_counts()  # 输出这一列中各个元素的总数
df[['day','time']][(df.tip>7)|(df.total_bill>50)]  # 假如加入了筛选条件后,我们只关心day和time这两列数据

统计描述

print df.describe()    #   描述性统计,只筛选出具有描述性的统计数据
df.info()  #   info()函数用于打印DataFrame的简要摘要,显示有关DataFrame的信息,包括索引的数据类型dtype和列的数据类型dtype,非空值的数量和内存使用情况

数据处理

df.T  #  数据转置 
df.sort_values(by='tip')  #按tip列升序排序

缺失值

查找缺失值

data.isnull().any()    # 缺失值为true,列中只要有true则返回true
data.isnull().all()  # 缺失值为true,列中全部为true才返回true
data.isnull().any(axis=1)  # 查看各行是否存在空值
data.isnull().any(axis=1).sum()  # 含有空值的行数

利用pandas替换缺失值

data.fillna(0) #缺失值用0替换

data.fillna(method='pad')  # 用前面的值替换,当第一行有缺失值时,利用向前替换是会失败的

data.fillna(method='backfill')  # 用后面的值替换

文本数据

分割数据

df['abilities'].str.split(',').str.get(1)  #将文本数据'abilities'这一列按“,”位置分割成几列,并且显示下标为1的列

df['abilities'].str.split(',',expand=True) # 将分割的几列数据按照二维列表的形式展示出来,此时不能继续使用str.get()函数


选取数据

loc只能选取索引的名称,iloc只能选取索引的下标序列
df['abilities'].str[1:3]  #选取文本数据'abilities'这一列中某几个位置的字符
df.loc[0] # 只能对行进行索引,选取行名为“0”的数据
df.loc[0:5]  # 选取行名为“0-5”(共6行)的数据
df.loc[[1,4,5]] # 选取行名为“1、4、5”(以列表形式写入)的数据
df.loc[[1,4,5],['against_bug']] # 选取行名为“1、4、5”,列名为'against_bug'的数据,都要以列表格式写入
df.iloc[[1,3,5],[2,4]]  # 索引,提取不连续行和列的数据,提取的是第1,3,5行,第2,4列的数据
df.iloc[2:4] #选取第2到第3行
df.iloc[0,1] #选取第0行1列的元素
df.iat[3,2]   #专门提取某一个数据,这个例子提取的是第三行,第二列数据(默认从0开始算)

索引

df.set_index('abilities') # 将某一列设为索引
df.set_index(keys=['abilities','against_bug'],append=False,drop=False)  # 将两元素均设为索引,默认append=False,不包含自然数的索引,若append=True,则索引为3列,包含自然数的索引

切片方式

new_df.loc[(slice(1,100),slice(None),[1.00,0.50]),:]  #选取多重索引的二维列表时,要对每一列的索引进行选取,“:”表示显示所有的列
new_df.loc[(slice(1,100),slice(None),[1.00,0.50]),'against_dragon']  # 只显示某一列,输出为series一维列表


idx=pd.IndexSlice
new_df.loc[idx[0:10,:,[1.00,0.50]],:idx['against_dragon']]   # “:”表示对某个索引不做限制,“:idx”表示截至到某一列为止

猜你喜欢

转载自blog.csdn.net/xiaokeaiuiya/article/details/108616102