官术网_书友最值得收藏!

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數據庫中的文件也輕松加載進來了。

主站蜘蛛池模板: 安陆市| 报价| 资兴市| 瑞昌市| 来宾市| 丹巴县| 汉中市| 历史| 尼勒克县| 苏尼特左旗| 津市市| 陈巴尔虎旗| 海林市| 南和县| 墨脱县| 新邵县| 梨树县| 衡水市| 自贡市| 大化| 大港区| 大荔县| 舞钢市| 家居| 南雄市| 张北县| 醴陵市| 泊头市| 阳信县| 成安县| 文成县| 中卫市| 祁门县| 普安县| 勐海县| 太仆寺旗| 灌阳县| 宜兰县| 常山县| 舞钢市| 汉寿县|