一、 pandas是什么?

pandas是数据分析的工具。

二、读入数据

一般处理“TSV,Tab-separated values,制表符分隔值
CSV,Comma-separated values,逗号分隔值“这样的数据。

#导入包
import pandas as pd

在读入数据时,可以使用相对路径或绝对路径,注意windows平台和linux平台分隔符的区别,此处以titanic数据集为例

#分隔符默认为','逗号,也可以指定'\t'
data = pd.read_csv('./titanic/train.csv')
# data_table = pd.read_table('./titanic/train.csv')       #该方法将被弃用
#windows中绝对路径要使用双反斜线
# data2 = pd.read_csv('D:\\Develop\\code\\data_analysis\\titanic\\train.csv')
#或者使用单斜线
# data2 = pd.read_csv('D:/Develop/code/data_analysis/titanic/train.csv')
# print(data2)

分隔符不同读出的区别

data = pd.read_csv('./titanic/train.csv', sep=',')  #默认是,号分隔符
print(data.head()) #输出前5行

   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            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S

分隔符是\t

data = pd.read_csv('./titanic/train.csv', sep='\t')
print(data.head())

  PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
0  1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/...                             
1  2,1,1,"Cumings, Mrs. John Bradley (Florence Br...                             
2  3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,S...                             
3  4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May ...                             
4  5,0,3,"Allen, Mr. William Henry",male,35,0,0,3...

查看部分数据

print(data.head(3))              #查看前3行
print('-------------')
print(data.tail(6))              #查看后6行

每次读取部分数据块,使用chunksize,使用循环读取每次读取到的数据块

chunker = pd.read_csv('./titanic/train.csv', chunksize=300)
for piece in chunker:
    print(piece)

三、更改列名

错误做法
#在读取数据的时候传入的names不能更改列的表头名字,只是显示的表头,注意区分这两个概念

data = pd.read_csv('./titanic/train.csv',
                   names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','仓位号','登船港口'])

#发现这样的写法是多了一个列索引,而没有改变数据第一行表示的数据字段物理含义
          乘客ID      是否幸存    仓位等级  ...       票价    仓位号      登船港口
0  PassengerId  Survived  Pclass  ...     Fare  Cabin  Embarked
1            1         0       3  ...     7.25    NaN         S
2            2         1       1  ...  71.2833    C85         C
3            3         1       3  ...    7.925    NaN         S
4            4         1       1  ...     53.1   C123         S

方法一:data.columns必须将列的名字全部写上,否则报错

data.columns = ['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','仓位号','登船港口']

data.columns = ['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','堂兄弟/妹个数','父母与小孩个数','船票信息','票价','仓位号','登船港口']

方法二:使用rename函数,可以不用全部更改,传入的是字典,inplace要置为true

data.rename(columns={'PassengerId':'乘客ID',
                     'Survived':'是否幸存',
                     'Pclass':'仓位等级',
                     'Name':'姓名',
                     'Sex':'性别',
                     'Age':'年龄',
                     'SibSp':'堂兄弟/妹个数',
                     'Parch':'父母与小孩个数',
                     'Ticket':'船票信息',
                     'Fare':'票价',
                     'Cabin':'仓位号',
                     'Embarked':'登船港口'}, inplace=True)

   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            4         1       1  ...  53.1000  C123         S
4            5         0       3  ...   8.0500   NaN         S

四、查看数据基本信息

print(data.info())


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
乘客ID       891 non-null int64
是否幸存       891 non-null int64
仓位等级       891 non-null int64
姓名         891 non-null object
性别         891 non-null object
年龄         714 non-null float64
堂兄弟/妹个数    891 non-null int64
父母与小孩个数    891 non-null int64
船票信息       891 non-null object
票价         891 non-null float64
仓位号        204 non-null object
登船港口       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB
print(data.describe())

             乘客ID        是否幸存        仓位等级  ...     堂兄弟/妹个数     父母与小孩个数          票价
count  891.000000  891.000000  891.000000  ...  891.000000  891.000000  891.000000
mean   446.000000    0.383838    2.308642  ...    0.523008    0.381594   32.204208
std    257.353842    0.486592    0.836071  ...    1.102743    0.806057   49.693429
min      1.000000    0.000000    1.000000  ...    0.000000    0.000000    0.000000
25%    223.500000    0.000000    2.000000  ...    0.000000    0.000000    7.910400
50%    446.000000    0.000000    3.000000  ...    0.000000    0.000000   14.454200
75%    668.500000    1.000000    3.000000  ...    1.000000    0.000000   31.000000
max    891.000000    1.000000    3.000000  ...    8.000000    6.000000  512.329200
print(data.values)
print(data.shape)
print(data.columns)
print(data.index)
print(data.memory_usage())

五、保存数据

在保存数据时,我们希望将对数据做的修改保存,而不保存其他的辅助信息,比如读出数据时的行索引和列索引。
如下最左边的一列就是行索引,不是原本数据中存在的,就没必要保存的数据中,使用index=False即可。

乘客ID  是否幸存  仓位等级  ...       票价   仓位号  登船港口
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     4     1     1  ...  53.1000  C123     S
4     5     0     3  ...   8.0500   NaN     S

同时为了避免不同系统之间可能出现乱码的现象,可以使用utf-8的编码格式保存
以保存前5行为例

#去掉行索引,保留列索引,因为列索引是数据的第一行,即字段意义说明
data.head().to_csv('chinese_train.csv',index=False,header=True, encoding='utf-8')

乘客ID,是否幸存,仓位等级,姓名,性别,年龄,堂兄弟/妹个数,父母与小孩个数,船票信息,票价,仓位号,登船港口
1,0,3,"Braund, Mr. Owen Harris",male,22.0,1,0,A/5 21171,7.25,,S
2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38.0,1,0,PC 17599,71.2833,C85,C
3,1,3,"Heikkinen, Miss. Laina",female,26.0,0,0,STON/O2. 3101282,7.925,,S
4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35.0,1,0,113803,53.1,C123,S
5,0,3,"Allen, Mr. William Henry",male,35.0,0,0,373450,8.05,,S