Python数据分析入门笔记1——学习前的准备
快速入门pandas,认识pandas三大结构Series、DataFrame和Panel中的前两种,知道读取文件,并且按行或者按列有选择性地查找数据。
pandas可以读取CSV和TXT文件中的数据,可以获取Excel、JSON、HTML、Word和PDF文件中的数据,也可以从数据库中获取数据。这里只列出常用的CSV和TXT文件、Excel文件的读取方法。
csv是一种逗号分隔的文件格式,但其分隔符不一定是逗号。可用记事本或excel打开。
csv文件使用read_csv()函数来读取。
最简单的举例:
import pandas as pd
#注意:如果文件中包含中文,必须加上encoding
data = pd.read_csv('d://分省份GDP数据.csv', encoding='gbk')
print(data.columns)#返回所有的列名对象,相当于字典的键名,默认把第0行作为列名
print(data.values)#返回所有的行
read_csv()函数语法格式如下,参数说明如下表所示。
pandas.read_csv(filepath_or_buffer, sep=‘,’, header=‘infer’, names=None, index_col=None, dtype=None, engine=None,nrows=None,encoding=None)
序号 | 参数 | 说明 |
---|---|---|
1 | filepath | 接收string,代表文件路径,无默认。 |
2 | sep | 接收string,代表分隔符。read_csv默认为“,”,read_table默认为制表符“Tab”。 |
3 | header | 接收int或sequence,表示将某行数据作为列名。默认为infer,表示自动识别。 |
4 | names | 接收array,表示列名。默认为None。 |
5 | index_col | 接收int、sequence或False,代表索引列的位置,取值为sequence代表为多重索引。 |
6 | dtype | 接收dict,代表写入的数据类型(列名 为key,数据格式为values)。默认为None。 |
7 | engine | 接收c或者Python,代表数据解析引擎。默认为c。 |
8 | nrows | 接收int,表示读取前n行。 |
尚待解决的问题:
Pandas提供了read_excel()函数来读取“xls”和“xlsx”两种Excel文件。
最简单的举例:
import pandas as pd
#注意read_excel方法中没有encoding参数
df=pd.read_excel("D://Projects/2019年底江苏省A级景区名录.xlsx",sheet_name=0,index_col=0)
print(df.columns)#返回所有的列名对象,相当于字典的键名,默认把第0行作为列名
print(df.values)#返回所有的行
read_excel()函数语法格式如下,参数说明如下表所示。
pandas.read_excel( filepath, sheetname=0, header=0, names=None, index_col=None, dtype=None ,nrows=None)
序号 | 参数 | 说明 |
---|---|---|
1 | filepath | 接收string,代表文件路径,无默认。 |
2 | sheetname | 接收string、int,代表Excel表内数据的分表位置。默认为0。 |
3 | header | 接收int或sequence,表示将某行数据作为列名。默认为infer,表示自动识别。 |
4 | names | 接收array,表示列名。默认为None。 |
5 | index_col | 接收int、sequence或False,代表索引列的位置,取值为sequence代表为多重索引。 |
6 | dtype | 接收dict,代表写入的数据类型(列名 为key,数据格式为values)。默认为None。 |
DataFrame是最常用的Pandas对象,类似于Office Excel表格。完成数据读取后,数据就以DataFrame数据结构存储在内存中。但此时并不能直接开始统计分析工作,需要使用DataFrame的属性与方法对数据的分布、大小等进行操作。
假设有一个DataFrame名为df,且数据如下:
学号 | 姓名 | 性别 | 年龄 | 住址 |
---|---|---|---|---|
S1 | 张三 | 男 | 15 | NaN |
S2 | 李四 | 男 | 16 | NaN |
S3 | 王五 | 女 | 15 | NaN |
S4 | 赵六 | 男 | 14 | NaN |
(1)假设我读取的时候,不指定行索引,参考代码如下:
import pandas as pd #导入pandas库
df=pd.read_csv("D://Projects/示例.csv",encoding="gbk") #以中文编码形式读取D盘Projects文件夹下的“示例.csv”文件
则属性与方法说明如下:
(2)假设我读取的时候设置了行索引,参考代码如下:
import pandas as pd #导入pandas库
#index_col=0,代表将数据的第一列“学号”作为行索引,也就是根据学号可以唯一地找到这一行。
#但设置行索引以后,再用values、size输出会得到不一样的结果。为什么?
df=pd.read_csv("D://Projects/示例.csv",encoding="gbk",index_col=0)
#使用布尔索引获取部分数据行,df['年龄']>df['年龄'].mean()的意思是年龄值大于平均值
df[df['年龄']>df['年龄'].mean()]
按某一列来分组:groupby(‘用来分组的列名’)
按多列来分组:groupby([‘列名1’,‘列名2’,‘列名3’])
df.groupby('性别')#按性别分组
df.groups #查看分组,输出结果{'女': ['S3'], '男': ['S1', 'S2', 'S4']}
df.groupby(['性别','年龄']) #按性别和年龄组合来分组,性别和年龄都相同的才会分到同一组
df.groups #查看分组,输出结果{('女', 15): ['S3'], ('男', 14): ['S4'], ('男', 15): ['S1'], ('男', 16): ['S2']}
有如下excel文档“2019年底江苏省A级景区名录.xlsx”,完成以下任务:
文档下载地址:2019年底江苏省A级景区名录.xlsx
用pandas的read_excel()方法读取这个文件,并将第一列序号作为行索引,并输出文件内容
用columns获取列索引,即输出表头
欢迎补充其他应用场景!