Python数据分析招式:pandas库提取清洗排序-1

简介: Python数据分析招式:pandas库提取清洗排序-1

要点:


数据的基本处理

数据的提取

数据的初步清洗

数据的排序

泰坦尼克数据集下载地址:

地址1(需要注册): https://www.kaggle.com/c/titanic/data

地址2(百度网盘): https://pan.baidu.com/s/1Vp0QmVLu43_Hb9jHR2FKXg

密码: rdfr


导入数据

# -*- coding: utf-8 -*-
# @File    : 泰坦尼克数据分析.py
# @Date    : 2018-06-03
import numpy as np
import pandas as pd
file = "data/train.csv"
df = pd.DataFrame(pd.read_csv(file))

1、数据的基本处理

#  形状
print(df.shape)
# (891, 12)
# 查看前3行
print(df.head(3))
"""
   PassengerId  Survived  Pclass    ...        Fare Cabin  Embarked
0            1         0       3    ...      7.2500   NaN         S
1            2         1       1    ...     71.2833   C85         C
2            3         1       3    ...      7.9250   NaN         S
[3 rows x 12 columns]
"""
# 查看后3行
print(df.tail(3))
"""
     PassengerId  Survived  Pclass    ...      Fare Cabin  Embarked
888          889         0       3    ...     23.45   NaN         S
889          890         1       1    ...     30.00  C148         C
890          891         0       3    ...      7.75   NaN         Q
[3 rows x 12 columns]
"""
# 信息
print(df.info())
"""
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB
None
"""
# 整体描述
print(df.describe())
"""
      PassengerId    Survived     ...           Parch        Fare
count   891.000000  891.000000     ...      891.000000  891.000000
mean    446.000000    0.383838     ...        0.381594   32.204208
std     257.353842    0.486592     ...        0.806057   49.693429
min       1.000000    0.000000     ...        0.000000    0.000000
25%     223.500000    0.000000     ...        0.000000    7.910400
50%     446.000000    0.000000     ...        0.000000   14.454200
75%     668.500000    1.000000     ...        0.000000   31.000000
max     891.000000    1.000000     ...        6.000000  512.329200
[8 rows x 7 columns]
"""
# 查看数据集的空值
print(df.isnull().sum())
"""
PassengerId      0
Survived         0
Pclass           0
Name             0
Sex              0
Age            177
SibSp            0
Parch            0
Ticket           0
Fare             0
Cabin          687
Embarked         2
dtype: int64
"""
# 唯一值
print(df["Pclass"].unique())
# [3 1 2]

2、数据的提取

# 按照索引的值提取数据
print(df.loc[630])
"""
PassengerId                                     631
Survived                                          1
Pclass                                            1
Name           Barkworth, Mr. Algernon Henry Wilson
Sex                                            male
Age                                              80
SibSp                                             0
Parch                                             0
Ticket                                        27042
Fare                                             30
Cabin                                           A23
Embarked                                          S
Name: 630, dtype: object
"""
# 取部分行和列 第二三四行和前5列
print(df.iloc[2:5, :5])
"""
   PassengerId   ...       Sex
2            3   ...    female
3            4   ...    female
4            5   ...      male
[3 rows x 5 columns]
"""
# 照条件提取  仓位为小于2的,并且性别为女性的数据
print(df[(df["Pclass"]<=2)&(df["Sex"]=="female")].head(3))
"""
   PassengerId  Survived  Pclass    ...        Fare Cabin  Embarked
1            2         1       1    ...     71.2833   C85         C
3            4         1       1    ...     53.1000  C123         S
9           10         1       2    ...     30.0708   NaN         C
[3 rows x 12 columns]
"""

3、数据的清洗

# 删除空值
print(df.shape)  # (891, 12)
ret = df.dropna(how="any")
print(ret.shape)  # (183, 12)
print(df.shape)  # (891, 12)
# 填充空值
ret = df.fillna(value=0)
print(df.loc[633])
print(ret.loc[633])
"""
PassengerId                              634
Survived                                   0
Pclass                                     1
Name           Parr, Mr. William Henry Marsh
Sex                                     male
Age                                      NaN
SibSp                                      0
Parch                                      0
Ticket                                112052
Fare                                       0
Cabin                                    NaN
Embarked                                   S
Name: 633, dtype: object
PassengerId                              634
Survived                                   0
Pclass                                     1
Name           Parr, Mr. William Henry Marsh
Sex                                     male
Age                                        0
SibSp                                      0
Parch                                      0
Ticket                                112052
Fare                                       0
Cabin                                      0
Embarked                                   S
Name: 633, dtype: object
"""
#用数据集里面的年龄均值来填充空值
ret = df['Age'].fillna(df['Age'].mean())
print(ret.shape)  # (891,)
# 对字符的处理,比如大小写的转换
print(df["Name"].map(str.upper).head(3))
"""
0                              BRAUND, MR. OWEN HARRIS
1    CUMINGS, MRS. JOHN BRADLEY (FLORENCE BRIGGS TH...
2                               HEIKKINEN, MISS. LAINA
Name: Name, dtype: object
"""
# 对字符串的快速映射转换
df['Pclass']=df['Pclass'].map({1:'一等舱',2:'二等舱',3:'三等舱'})
print(df.head(3))
"""
   PassengerId  Survived Pclass    ...        Fare Cabin  Embarked
0            1         0    三等舱    ...      7.2500   NaN         S
1            2         1    一等舱    ...     71.2833   C85         C
2            3         1    三等舱    ...      7.9250   NaN         S
[3 rows x 12 columns]
"""
# 对数据集中的数据格式的改变
print(df.dtypes)
"""
PassengerId      int64
Survived         int64
Pclass          object
Name            object
Sex             object
Age            float64
SibSp            int64
Parch            int64
Ticket          object
Fare           float64
Cabin           object
Embarked        object
dtype: object
"""
ret = df['Fare'].astype('int') #把原来的float64->int
print(ret.dtypes) # int32
# 更改列的名字
ret = df.rename(columns={'Survived':'是否获救'})
print(ret.head(3))
"""
   PassengerId  是否获救 Pclass    ...        Fare Cabin  Embarked
0            1     0    三等舱    ...      7.2500   NaN         S
1            2     1    一等舱    ...     71.2833   C85         C
2            3     1    三等舱    ...      7.9250   NaN         S
[3 rows x 12 columns]
"""
# 去掉重复值
# #比如我们想知道登船的类别,去掉所有重复的数据
ret = df['Embarked'].drop_duplicates()
print(ret)
"""
0       S
1       C
5       Q
61    NaN
Name: Embarked, dtype: object
"""
# 数据的代替,替换
df['Sex']=df['Sex'].replace('male','男')
print(df["Sex"].head(3))
"""
0         男
1    female
2    female
Name: Sex, dtype: object
"""

4、数据的排序

# 按照年龄进行降序排列
print(df.sort_values(by=['Age'],ascending=False)["Age"].head(3))
"""
630    80.0
851    74.0
493    71.0
Name: Age, dtype: float64
"""
# 按照index来排序
print(df.sort_index(ascending=False).head(3))
"""
     PassengerId  Survived Pclass    ...      Fare Cabin  Embarked
890          891         0    三等舱    ...      7.75   NaN         Q
889          890         1    一等舱    ...     30.00  C148         C
888          889         0    三等舱    ...     23.45   NaN         S
"""

参考文章:

18招,小白必看的数据分析招式|精选上篇

相关文章
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名
【4月更文挑战第22天】Pandas Python库提供数据排序和排名功能。使用`sort_values()`按列进行升序或降序排序,如`df.sort_values(by=&#39;A&#39;, ascending=False)`。`rank()`函数用于计算排名,如`df[&#39;A&#39;].rank(ascending=False)`。多列操作可传入列名列表,如`df.sort_values(by=[&#39;A&#39;, &#39;B&#39;], ascending=[True, False])`和分别对&#39;A&#39;、&#39;B&#39;列排名。
438 2
|
索引 Python
如何使用Python的Pandas库进行数据合并和拼接?
Pandas的`merge()`函数用于数据合并,如示例所示,根据&#39;key&#39;列对两个DataFrame执行内连接。`concat()`函数用于数据拼接,沿轴0(行)拼接两个DataFrame,并忽略原索引。
350 2
|
数据处理 Python
如何使用Python的Pandas库进行数据排序和排名?
Pandas在Python中提供数据排序和排名功能。使用`sort_values()`进行排序,如`df.sort_values(by=&#39;A&#39;, ascending=False)`进行降序排序;用`rank()`进行排名,如`df[&#39;A&#39;].rank(ascending=False)`进行降序排名。多列操作可传入列名列表,如`df.sort_values(by=[&#39;A&#39;, &#39;B&#39;], ascending=[True, False])`。
436 6
|
索引 Python
如何使用Python的Pandas库进行数据合并和拼接?
【2月更文挑战第28天】【2月更文挑战第103篇】如何使用Python的Pandas库进行数据合并和拼接?
212 0
|
索引 Python
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
218 0
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
|
索引 Python
如何在Python中,Pandas库实现对数据的时间序列分析?
Pandas在Python中提供强大的时间序列分析功能,包括:1) 使用`pd.date_range()`创建时间序列;2) 通过`pd.DataFrame()`将时间序列转为DataFrame;3) `set_index()`设定时间列作为索引;4) `resample()`实现数据重采样(如按月、季度);5) `rolling()`进行移动窗口计算,如计算移动平均;6) 使用`seasonal_decompose()`进行季节性调整。这些工具适用于各种时间序列分析场景。
282 0
|
数据挖掘 索引 Python
如何在Python中,Pandas库实现对数据的时间序列分析?
【4月更文挑战第21天】Pandas在Python中提供了丰富的时间序列分析功能,如创建时间序列`pd.date_range()`,转换为DataFrame,设置时间索引`set_index()`,重采样`resample()`(示例:按月`&#39;M&#39;`和季度`&#39;Q&#39;`),移动窗口计算`rolling()`(如3个月移动平均)以及季节性调整`seasonal_decompose()`。这些工具适用于各种时间序列数据分析任务。
275 2
|
机器学习/深度学习 数据可视化 搜索推荐
Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。
【7月更文挑战第5天】Python在社交媒体分析中扮演关键角色,借助Pandas、NumPy、Matplotlib等工具处理、可视化数据及进行机器学习。流程包括数据获取、预处理、探索、模型选择、评估与优化,以及结果可视化。示例展示了用户行为、话题趋势和用户画像分析。Python的丰富生态使得社交媒体洞察变得高效。通过学习和实践,可以提升社交媒体分析能力。
318 1
|
数据采集 数据挖掘 数据处理
使用Python和Pandas处理CSV数据
使用Python和Pandas处理CSV数据
367 5
|
索引 Python
python pandas 把数据保存成csv文件,以及读取csv文件获取指定行、指定列数据
该文档详细介绍了如何使用Python的Pandas库处理图像数据集,并将其保存为CSV文件。示例数据集位于`test_data`目录中,包含5张PNG图片,每张图片名中的数字代表其标签。文档提供了将这些数据转换为CSV格式的具体步骤,包括不同格式的数据输入方法(如NumPy数组、嵌套列表、嵌套元组和字典),以及如何使用`pd.DataFrame`和`to_csv`方法保存数据。此外,还展示了如何读取CSV文件并访问其中的每一行和每一列数据,包括获取列名、指定列数据及行数据的操作方法。
781 1