Python数据分析_Pandas学习__2

版权声明:随意了,开心就好。反正是给大家分享的笔记 https://blog.csdn.net/u011486491/article/details/85731251

Python数据分析_Pandas学习__2

## 常用数据分析方法

# 查看数据的行数和列数
df.shape
>>> (68630, 14)
d1.count()          #非空元素计算
d1.min()            #最小值
d1.max()            #最大值
d1.idxmin()         #最小值的位置,类似于R中的which.min函数
d1.idxmax()         #最大值的位置,类似于R中的which.max函数
d1.quantile(0.1)    #10%分位数
d1.sum()            #求和
d1.mean()           #均值
d1.median()         #中位数
d1.mode()           #众数
d1.var()            #方差
d1.std()            #标准差
d1.mad()            #平均绝对偏差
d1.skew()           #偏度
d1.kurt()           #峰度
d1.describe()       #一次性输出多个描述性统计指标
​
​
​

数据清洗

去除多余字符

# 单列字段清洗-去空格
df['商品名称'] = df['商品名称'].map(lambda s : s.strip())
df['A']=df['A'].map(str.strip)   # 去除两边空格
df['A']=df['A'].map(str.lstrip)  # 去除左边空格
df['A']=df['A'].map(str.rstrip)  # 去除右边空格
df['A']=df['A'].map(str.upper)   # 转大写
df['A']=df['A'].map(str.lower)   # 转小写
df['A']=df['A'].map(str.title)   # 首字母大写
# 字段切分,并创建新特征
df.loc[:,"区域"] = df['仓库'].map(lambda s:s[0:2])
# 转换某特征(列)的数据格式
df['行号'] = df['行号'].astype(float)  
# 转化时间格式
df['time']=pd.to_datetime(df['time'])
​
# eg: 处理 ['(1994)'] ,去除[],去除‘’,去除()
df['上映日期'] = df['上映日期'].map(lambda s: s.strip('[]').strip("''").strip('()'))

缺失值处理

# 缺失值判断(在原数据对象以T/F替换)
df.isnull()
df['A'].isnull()
# 非空值
df.notnull() 
​
# 缺失值计数方法
# 方法一
df['A'].isnull().value_counts()
>>> True     68629
    False        1
    Name: A, dtype: int64
# 方法二
df['A'].isnull().sum()
>>> 68629
df.isnull().sum()
>>> 仓库          0
    货号          0
    条码          2
    规格      62290
​
# 默认axi=0,how=‘any’,按行,任意一行有NaN就整列丢弃
df.dropna()
df.dropna(axis=1)
# 按列(axis=1),丢弃指定label的列,默认按行。。。
df.drop(labels, axis=1)
        
# 一行中全部为NaN的,才丢弃
df.driopna(how='all')
​
# 保留至少3个非空值的行:一行中有3个值是非空的就保留
df.dropna(thresh=3)
​
# 缺失值填充
df.fillna(0)

值替换

# 将df的A列中 -999 全部替换成空值
df["A"].replace(-999, np.nan)
​
#-999和1000 均替换成空值
obj.replace([-999,1000],  np.nan)
​
# -999替换成空值,1000替换成0
obj.replace([-999,1000],  [np.nan, 0])
​
# 同上,写法不同,更清晰
obj.replace({-999:np.nan, 1000:0})
​
#eg: 替换[] 为中国,然后替换掉原来的列
df['国家地区'] = df['国家地区'].replace('[]', '中国')

重复值处理

# 返回布尔向量、矩阵
df['A'].duplicated()
df.duplicated()
# 保留k1列中的唯一值的行,默认保留第一行
df.drop_duplicated(["k1"])
# 保留 k1和k2 组合的唯一值的行,take_last=True 保留最后一行
df.drop_duplicated(["k1","k2"], take_last=True)
# 返回唯一的数组
df['A'].unique()
​
# eg:获取不重复数据
 print(df[~df['国家地区'].duplicated()]['国家地区'])

数据切片

# 1、[]只能对 行(row/index) 切片,前闭后开
df[0:3]
df[:4]
df[4:]
​
# 2、where布尔查找,建立在[]基础之上
df[df["A"]>7]
​
# 3、isin()返回布尔值
df["A"].isin([1,2,3])
df.loc[df['sepal_length'].isin([5.8,5.1])]
​
# 4、loc :根据名称Label切片
# df.loc[A,B] A是行范围,B是列范围
df.loc[1:4,['petal_length','petal_width']]
​
# 5、iloc:切位置,以序列号去切
df.iloc[1:4,:]
​
# 6、ix:混切
# 名称和位置混切,但效率低,少用
df1.ix[0:3,['sepal_length','petal_width']]
​

数据操作和判断

# 1、判断比较操作符
df[df["A"]>7]
​
# 2、query 多个where整合切片,&:于,|:或 
df.query(" A>5.0 & (B>3.5 | C<1.0) ") 
​
# 3、isin 返回布尔值
s.isin([1,2,3])
df['A'].isin([1,2,3])
​
# eg:选取列A中值为5.8,5.1的所有行组成dataframe
df.loc[df['A'].isin([5.8,5.1])]
​
# 4、contains 使用DataFrame模糊筛选数据(类似SQL中的LIKE)
# 使用正则表达式进行模糊匹配,*匹配0或无限次,?匹配0或1次
df[df['商品名称'].str.contains("四件套")]
df[df['商品名称'].str.contains(r".*四件套.*")]、
​
# 5、map与lambda  自定义函数应用于Series每个元素
map(lambda s: s.strip('[]').strip("''").strip('()'))
map(lambda s : s+1, alist)

练习题地址:

https://www.kesci.com/home/project/59e77a636d213335f38daec2

猜你喜欢

转载自blog.csdn.net/u011486491/article/details/85731251