3.2.2 数据加载
要进行数据分析,首先要获取数据。Pandas提供了一些常用的数据加载功能,并且能将其他格式的数据默认转换为以DataFrame数据框的形式呈现,表3-3所示为常用的数据读取函数。
表3-3 常用的数据读取函数的对比说明
1.read_csv/read_table函数
Pandas中的read_csv函数和read_table函数很类似,区别在于read_csv函数中默认分隔符为逗号,而read_table函数中默认分隔符为制表符(tab)。read_csv和read_table函数中均有很多参数,可以在数据读取时加以说明,如表3-4所示。
接下来我们来看一个简单的广告数据样例,以下是广告用户画像数据的前几行,可以发现每行都是以逗号分隔的。
20200107,华为手机,android,19~25岁,F 20200107,苹果手机,iOS,26~35岁,M 20200107,小米手机,android,26~35岁,M 20200107,魅族手机,android,26~35岁,M 20200107,VIVO手机,android,0~18岁,F 20200107,VIVO手机,android,26~35岁,F 20200107,苹果手机,iOS,26~35岁,F 20200107,小米手机,android,36~45岁,F
表3-4 read_csv和read_table函数中重要的参数及说明
使用read_csv函数将其加载为DataFrame数据格式,并打印出前5行。
In [37]: df2 = pd.read_csv('ex2.csv') In [38]: df2.head() Out[38]: 20200107 华为手机 android 19~25岁 F 0 20200107 苹果手机 iOS 26~35岁 M 1 20200107 小米手机 android 26~35岁 M 2 20200107 魅族手机 android 26~35岁 M 3 20200107 VIVO手机 android 0~18岁 F 4 20200107 VIVO手机 android 26~35岁 F
当然也可以使用read_table函数来读取,只要指定参数seq=‘,’即可。
In [39]: df2 = pd.read_table('ex2.csv',sep = ',') In [40]: df2.head() Out[40]: 20200107 华为手机 android 19~25岁 F 0 20200107 苹果手机 iOS 26~35岁 M 1 20200107 小米手机 android 26~35岁 M 2 20200107 魅族手机 android 26~35岁 M 3 20200107 VIVO手机 android 0~18岁 F 4 20200107 VIVO手机 android 26~35岁 F
仔细观察后,我们发现这个文件是没有列标题的(在数据文件默认列标题的情况下,会以第一行数据为列标题),在pd.read_csv函数中可以通过names参数来指定各列列名。
In [43]: df2 = pd.read_csv('ex2.csv', names=[ ...: 'Date', 'Phone_type', 'System', 'Age', 'Sex']) In [44]: df2.head() Out[44]: Date Phone_type System Age Sex 0 20200107 华为手机 android 19~25岁 F 1 20200107 苹果手机 iOS 26~35岁 M 2 20200107 小米手机 android 26~35岁 M 3 20200107 魅族手机 android 26~35岁 M 4 20200107 VIVO手机 android 0~18岁 F
对于其中的Date列(表示日期),我们可以在加载时将其解析为时间格式:
In [45]: df2 = pd.read_csv('ex2.csv', parse_dates=[0], names=[ ...: 'Date', 'Phone_type', 'System', 'Age', 'Sex'] In [46]: df2.head() Out[46]: Date Phone_type System Age Sex 0 2020-01-07 华为手机 android 19~25岁 F 1 2020-01-07 苹果手机 iOS 26~35岁 M 2 2020-01-07 小米手机 android 26~35岁 M 3 2020-01-07 魅族手机 android 26~35岁 M 4 2020-01-07 VIVO手机 android 0~18岁 F
类似地,可以参照表3-4中的参数说明使用函数中的其他参数,具体根据自己的实际情况定义即可。
In [47]: df2 = pd.read_csv('ex3.csv', sep='\t', names=[ ...: 'Date', 'Phone_type', 'System', 'Age', 'Sex'], ...: parse_dates=[0], skiprows=[1, 3, 5], ...: index_col=3, nrows=4, encoding='utf8') In [48]: df2 Out[48]: Age Date Phone_type System Sex 26~35岁 2020-01-07 苹果手机 iOS M 26~35岁 2020-01-07 魅族手机 android M 26~35岁 2020-01-07 VIVO手机 android F
2.read_excel函数
read_excel函数主要用于加载xls或xlsx格式的文件,它的参数与read_csv\read_table的参数基本相同,同样包括header、index_col、nrows等。不同的是read_excel函数中用于指定文件所在路径的参数为io,同时多了一个sheetname参数,用于指定需要加载Excel文件中的哪个sheet数据,如下所示:
In [49]: df3 = pd.read_excel('ex3.xlsx',sheetname=0) In [50]: df3.head() Out[50]: Date Phone_type System Age Sex 0 20200107 华为手机 android 19~25岁 F 1 20200107 苹果手机 iOS 26~35岁 M 2 20200107 小米手机 android 26~35岁 M 3 20200107 魅族手机 android 26~35岁 M 4 20200107 VIVO手机 android 0~18岁 F
sheetname=0表示读取Excel文件中的第一个sheet中的数据。
3.read_sql函数
在实际工作中,我们的数据一般都是存放在数据库中的(广告行业中的数据通常如此),只有少部分数据是保存在本地的文件中。这就要求Python需支持直接提取数据库中数据的函数。以连接MySQL数据库为例,Pandas提供了read_sql函数以轻松加载MySQL数据库中的任意表数据,但需要用到pymysql和sqlalchemy工具包,这两个工具包可以直接通过pip install pymysql和pip install sqlalchemy命令安装。
下面我们尝试将本地MySQL数据库中的数据加载到DataFrame中:
In [51]: import pymysql In [52]: from sqlalchemy import create_engine In [53]: DB_USER = 'root' In [54]: DB_PASS = **** In [55]: DB_HOST = '127.0.0.1' In [56]: DB_PORT = 3306 In [57]: DATABASE = 'firstdb' In [58]: connect_info = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format( ...: DB_USER, DB_PASS, DB_HOST, DB_PORT, DATABASE) In [59]: engine = create_engine(connect_info) In [60]: sql_cmd = "SELECT * FROM customer" In [61]: df = pd.read_sql(sql=sql_cmd, con=engine) In [62]: df Out[62]: id first_name surname id2 0 1 YVonns clegg 0 1 2 johnny chaks-chaka 0 2 3 winston powers 0 3 4 partricis mankunkn 0
可以看到,本地MySQL数据库中的文件也轻松加载进来了。