数据的添加、修正与删去

原始数据

import pandas as pd
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
print(df)

添加数据

DataFrame方针添加首要包含列数据添加和行数据添加。

按列添加数据

按列添加数据首要用三种办法进行完成:

  1. 直接为DataFrame进行赋值
  2. 运用loc特点在DataFrame方针的最终添加一列
  3. 在指定方位插入一列 insert进行完成
import pandas as pd
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
pd.set_option('display.unicode.east_asian_width',True)
df = pd.DataFrame(data=data,index=index,columns=columns)
# print(df)
#添加一列物理成果
df['物理']=[88,99,100,110]
print(df)
# 运用loc特点进行添加一列化学成果
df.loc[:,'化学']=[100,110,120,124.5]  #注意:小数点会保持一致,所以相当于新增的是[100.0,110.0,120.0,124.5]
print(df)
# 在指定方位插入一列生物成果
df.insert(2,'生物',[121,131,141,145])  #注意:是在列索引为2的方位新增而不是替换
print(df)

按行添加数据

按行添加数据首要用两种办法进行完成:

1、添加单行数据 首要用loc特点进行完成

2、添加多行数据

import pandas as pd
# 处理数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
# print(df)
# 添加单行
df.loc['阿飞']=[100,120,130]
print(df)
# 添加多行
df_add=pd.DataFrame(
    {
        '语文':[100,123,108],
        '数学':[101,113,103],
        '英语':[102,114,119]
    },index=['阿星','阿薇','阿慧']
)
new_df=pd.concat([df_add,df])
print(new_df)

修正数据

修正数据包含行、列标题与数据的修正。

修正列标题

修正列标题首要用两种办法进行完成:

1、修正列标题首要用到DataFrame方针的cloumns特点,直接赋值即可。

2、rename()办法进队伍标题的修正。

import pandas as pd
# 处理数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
# print(df)
# 修正单个  需求将一切的标题都写上,这样比较繁琐
df.columns=['语文','数学一','英语']
print(df)
# 用字典指定进行修正即可  指定inplace为True修正的时原df方针 不指定则回来修正后的新df
df.rename(columns={'语文':'语文一'},inplace=True)
print(df)
# 修正多个值
df.rename(columns={'语文':'语文一','数学':'数学一'},inplace=True)
print(df)

修正行标题

修正行标题首要用两种办法进行完成:

1、修正行标题首要用到DataFrame方针的index特点,直接赋值即可。

2、rename()办法进队伍标题的修正。

import pandas as pd
# 处理数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
# print(df)
df.index=[1,2,3,4]
print(df)
# 用字典指定进行修正即可  指定inplace为True修正的时原df方针 不指定则回来修正后的新df
df.rename(index={'阿岳':'Peric'},inplace=True)
print(df)
# 修正多个值
df.rename(index={'阿岳':'Peric','阿乔':'Parry','阿蓝':'Anna'},inplace=True)
print(df)

修正数据

修正数据首要用到DataFrame方针中的loc特点和iloc特点。

import pandas as pd
# 处理数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
# print(df)
# 修正整行数据
df.loc['阿岳']=[120,134,145]
print(df)
# 修正整列数据
df.loc[:,'语文']=[111,99,102,111]
print(df)
# 修正某一数据
df.loc['阿岳','英语']=150
print(df)
# 运用iloc 特点修正数据
df.iloc[0,0] = 111
print(df)
df.iloc[:,0] = [111,112,113,114]
print(df)
df.iloc[0,:] = [123,124,125]
print(df)

删去数据

删去数据首要用的是DataFrame方针中的drop()办法。 语法如下:

drop(labels, axis=0, level=None, inplace=False, errors='raise')

常用参数阐明:

labels: 表明行标签或者列标签

axis:指定依照行进行删去,还是依照列进行删去,假如设置为0,那么则删去行,假如为1,则删去列。0行1列

index:index是依照行删去时传入的参数,需求传入的是一个列表,包含待删去行的索引编号。

inplace:可选参数,对原数组做出修正并回来一个新数组。默认值为false,假如值为true,那么原数组直接就被替换。

columns:columns是依照列删去时的参数,同样传入的是一个列表,包含需求删去列的称号。

import pandas as pd
# 处理数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width',True)
data = [[110,123,132],[98,88,97],[101,102,103],[110,121,109]]
index = ['阿岳','阿乔','阿萧','阿蓝']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data,index=index,columns=columns)
# print(df)
df.drop(labels='数学',axis=1,inplace=True)  # 删去列标签为数学的列  #df.drop(columns=['数学'],inplace=True)
print(df)
df.drop(columns=['数学','语文'],inplace=True)  # 删去column为数学和语文的列
print(df)
df.drop(['阿岳'],axis=0,inplace=True)  # 删去某行 #df.drop(labels='阿岳',axis=0,inplace=True)
print(df)
df.drop(index='阿乔',axis=0,inplace=True)  # 删去index为阿乔的某行
print(df)

删去特定条件的行

删去特点条件的行,首先找到满意该条件的行索引,然后再运用drop()办法将其删去。

df.drop(labels='阿萧',axis=0,inplace=True) # 删去行标签为阿萧的行
print(df)

数据清洗

缺失值查找与处理

首先要找到缺失值,首要运用DataFrame方针的info()办法

import pandas as pd
# 处理数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('TB2018.xls')
# print(df)
# print(df.info())  #显示归纳数据
# 判别数据是否存在缺失值 还能够运用isnull()和notnull()办法
"""
isnull():
    缺失值回来True 非缺失值回来False
notnull():
    缺失值回来False 非缺失值回来True
"""
print(df.isnull)
print(df.notnull)

缺失值删去处理

经过前面的判别得知数据缺失状况,下面将缺失值删去,首要运用dropna()办法,该办法用于删去含有缺失值的行,首要代码如下:

import pandas as pd
# 处理数据输出时列名不对齐的问题
# pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('TB2018.xls')
print(df)
# print(df.info())
new_df = df.dropna()
print(new_df)

缺失值填充处理

关于缺失数据,假如比例高于30%能够选择放弃这个指标,做删去处理,低于30%的尽量不要删去,而是选择将这部分数据进行填充,一般以0、众数、均值进行填充。DataFrame方针中的fillna()函数能够完成填充缺失数据,pad/ffill表明用前一个非缺失值去填充该缺失值,backffill/bfill表明用下一个非缺失值填充该缺失值。

import pandas as pd
# 处理数据输出时列名不对齐的问题
# pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('TB2018.xls')
print(df)
# print(df.info())
df['宝物总数量'] = df['宝物总数量'].fillna(0)
#df['宝物总数量'] = df['宝物总数量'].ffill()  前一个非缺失值填充
#df['宝物总数量'] = df['宝物总数量'].bfill()  后一个非缺失值填充
print(df)

重复值处理

关于数据中存在的重复数据,包含重复的行或者几行中某一列的值重复一般做删去处理,首要运用dataFrame方针的drop_duplicates()办法。

df.drop_duplicates(subset=['A','B','C'],keep='first',inplace=True)

参数阐明如下:

  • subset:表明要进去重的列名,默以为 None。
  • keep:有三个可选参数,分别是 first、last、False,默以为 first,表明只保存第一次呈现的重复项,删去其余重复项,last 表明只保存最终一次呈现的重复项,False 则表明删去一切重复项。
  • inplace:布尔值参数,默以为 False 表明删去重复项后回来一个副本,若为 Ture 则表明直接在原数据上删去重复项。
import pandas as pd
# 处理数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('1月.xlsx')
print(df)
#  判读每一行数据是否相同
print(df.duplicated())  #不同回来False
# 去除悉数的重复数据
df.drop_duplicates()
print(df)
# 去除指定列的重复数据
new_df= df.drop_duplicates(['宝物标题'])
print(new_df)
# 保存重复行中的最终一行
df2 = df.drop_duplicates(['宝物标题'],keep='last')
print(df2)
# 直接删去,保存一个副本
df.drop_duplicates(['收货人姓名'],inplace=True)  #默以为 False 表明删去重复项后回来一个副本,若为 Ture 则表明直接在原数据上删去重复项。
print(df)

索引的效果

索引的效果相当于图书的目录,能够依据目录中的页码快速找到所需的内容。pandas索引的效果如下:

1、更便利的查询数据

2、运用索引能够提升查询功能 假如索引是仅有的,pandas会运用哈希表优化,查找数据的时刻复杂度为O(i)。 假如索引不是仅有的,但是有序,pandas会依据二分查找法,查找数据的时刻复杂度为O(logN)。 假如索引是完全随机的,那么每次查询都要扫描数据表,查找数据的时刻复杂度为O(N)。

3、主动的数据对齐功能。

4、强大的数据结构: 根据分类数的索引,提升功能。 多维索引,用于groupby多维聚合成果等。 时刻类型索引,强大的日期和时刻的办法支撑。

import pandas as pd
s1 = pd.Series([10,20,30],index=list('abc'))
print(s1)
s2 =pd.Series([2,3,4],index=list('bcd'))
print(s2)
print(s1 s2)

Pandas统计分析(三)

从头设置索引

pandas有一个很重要的办法是reindex(),它的效果是创立一盒适应新索引的新方针。语法如下:

DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)

参数如下:

labels : 新的标签/索引,以契合’axis’所指定的axis。

index, columns : 新的标签/索引要契合。最好是一个索引方针,以防止重复的数据

axis : axis的方针。能够是axis的称号(’索引’、’列’)或数字(0、1)。

method: {None, ‘backfill’/’bfill’, ‘pad’/’ffill’, ‘nearest’}, optional

copy : 回来一个新的方针,即便经过的索引是相同的。

level : 跨层广播,与经过的MultiIndex层的索引值相匹配。

fill_value : 在核算前用这个值填充现有的缺失(NaN)值,以及成功的DataFrame对齐所需的任何新元素。假如两个对应的DataFrame方位的数据都缺失,成果将是缺失。

limit : 向前或向后填充的最大接连元素数

tolerance : 不精确匹配的原始和新标签之间的最大间隔。匹配方位的索引值最能满意方程式abs(index[indexer] – target) <= tolerance。

回来 : reindexed : DataFrame

对Series方针从头设置索引

import pandas as pd
s1 = pd.Series([88, 77, 66], index=[1, 2, 3])
print(s1)
print(s1.reindex([1,2,3,4,5]))
print(s1.reindex([1,2,3,4,5],fill_value=0))

Pandas统计分析(三)

对dataframe方针从头设置索引

import pandas as pd
data = [[110,105,99],[105,88,115],[109,120,130]]
index=['mr001','mr003','mr005']
columns = ['语文','数学','英语']
df = pd.DataFrame(data=data, index=index,columns=columns)
print(df)
#经过reindex()办法从头设置行索引、列索引和队伍索引
print(df.reindex(['mr001','mr002','mr003','mr004','mr005'])) #①
print(df.reindex(columns=['语文','物理','数学','英语']))
print(df.reindex(index=['mr001','mr002','mr003','mr004','mr005'],columns=['语文','物理','数学','英语']))

①的输出:

Pandas统计分析(三)

注意:从头设置行索引/列索引之后,由于没有数据,所以会显示空格。

设置某列为行索引

设置某列为行索引首要运用set_index()办法

import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
df=pd.read_excel('1月.xlsx')
df1=df.head()
print(df1)
#设置“买家会员名”为行索引
df=df.set_index(['买家会员名'])
df2=df.head()
print(df2)

Pandas统计分析(三)

数据清洗后从头设置接连的行索引

在对Dataframe方针进行数据清洗后,例如去掉含有NaN的行之后,发现行索引还是原来的行索引。

假如要从头设置索引能够运用reset_index()办法,在删去的确数据后从头设置索引,首要代码如下:

import pandas as pd
df=pd.read_excel('TB2018.xls')
print(df)
df1=df.dropna()
print(df1) # 删去含有空格的行,剩余025689
df2=df.dropna().reset_index(drop=True)
print(df2) # 对剩余的行从头赋予行索引:012345