1.修改数据
【修改学生成绩数据:整行】
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]
name = ['明日', '七月流火', '高袁圆', '二月二']
columns = ['语文', '数学', '英语']
df = pd.DataFrame(data=data, index=name, columns=columns)
df.loc['明日'] = [120, 115, 109]
【在原值上加10】
df.loc['明日']= df.loc['明日']+10
df.iloc[0,:] = [120, 115, 109]
语文 数学 英语
明日 120 115 109
七月流火 105 88 115
高袁圆 109 120 130
二月二 112 115 140
【修改整列数据】
df.loc[:,'语文'] = [115, 108, 112, 118]
df.iloc[:,0] = [115, 108, 112, 118]
语文 数学 英语
明日 115 105 99
七月流火 108 88 115
高袁圆 112 120 130
二月二 118 115 140
【修改某一处数据】
df.loc['明日','语文'] = 115
df.iloc[0,0] = 115
语文 数学 英语
明日 115 105 99
七月流火 105 88 115
高袁圆 109 120 130
二月二 112 115 140
2.删除数据
import pandas as pd
pd.set_option('display.unicode.east_asian_width',True)
data = [[110, 105, 99], [105, 88, 115], [109, 120, 130], [112, 115, 140]]
name = ['明日', '七月流火', '高袁圆', '二月二']
columns = ['语文', '数学', '英语']
df = pd.DataFrame(data=data, index=name, columns=columns)
# DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
labels 表示行标签或列标签
axis=0 表示按行删除 axis=1表示按列删除,默认值为0
index删除行,默认为None
columns 删除列,默认为None
level 针对有两级索引的数据 level=0表示按第1级索引删除整行 level=1表示按第2级索引删除整行,默认值为None
inplace 可选参数,对原数组作出修改并返回一个新数组,默认为False,如为True,原数组直接被替换
errors 参数值为ignore(忽略,取消错误)或raise,默认值为raise
【删除行列数据】
df.drop(['数学'], axis=1, inplace=True)
<删除columns为数学的列>
df.drop(columns='数学', inplace=True)
<删除列标签为“数学”的列>
df.drop(labels='数学', axis=1, inplace=True)
语文 英语
明日 110 99
七月流火 105 115
高袁圆 109 130
二月二 112 140
【删除某一行】
df.drop(['明日','二月二'], inplace=True)
语文 数学 英语
七月流火 105 88 115
高袁圆 109 120 130
【删除index为“明日”的行】
df.drop(index='明日', inplace=True)
语文 数学 英语
七月流火 105 88 115
高袁圆 109 120 130
二月二 112 115 140
【删除行标签为“明日”的行】
df.drop(labels='明日', axis=0, inplace=True)
语文 数学 英语
七月流火 105 88 115
高袁圆 109 120 130
二月二 112 115 140
【删除特定条件的行】
# 删除数学中包含分数88的行,语文小于110的行
df.drop(index=df[df['数学'].isin([88])].index[0], inplace=True)
df.drop(index=df[df['语文']<110].index[0], inplace=True)
print(df)
3.数据清洗
# 缺失值指的是由于某种原因导致数据为空
import pandas as pd
df = pd.read_excel('NBA.xlsx')
print(df)
print(df.info())
# 判断数据是否存在缺失值
import pandas as pd
df = pd.read_excel('NBA.xlsx')
print(df)
print(df.isnull())
# 缺失值返回True,非缺失值返回False
print(df.notnull())
# 缺失值返回False,非缺失值返回True
【缺失值删除处理】
import pandas as pd
df = pd.read_excel('NBA.xlsx')
df.dropna()
print(df)
# 判断一列的数据是否缺失
df1 = df[df['宝贝总数量'].notnull()]
【缺失值填充】
import pandas as pd
df = pd.read_excel('NBA2.xlsx')
# DataFrame对象中的fillna函数可以实现填充缺失数据
# pad/ffill函数表示用前一个非缺失值去填充该缺失值
# backfill/bfill函数表示用下一个非缺失值填充该缺失值
# None用于指定一个值去替换缺失值
# 将NaN填充为0
df['宝贝数量'] = df['宝贝数量'].fillna(0)
print(df)
【重复值处理】
# 先判断每一行数据是否重复(完全相同)
import pandas as pd
df = pd.read_excel('NBA2.xlsx')
df.duplicated()
# 返回为False,表示不重复;返回为True,表示重复
df.drop_duplicates()
# 去除提定列的重复数据
df.drop_duplicates(['会员名'])
# 保留重复行中的最后一行
df.drop_duplicates(['会员名'], keep='last')
# keep = 'first'表示保留第一次出现的重复行时(默认值)
# keep = 'last' 表示保留最后一次出现的重复行
# keep = False 表示去除所有的重复行
# 直接删除,保留一个副本
df.drop_duplicates(['会员名','支付宝账号'], inplace=False)
# inplace=True表示直接在原来的DataFrame对象上删除重复项
# inplace=False表示删除重复项目后再生成一个副本(默认值)