一、簡介
1.數據清理的重要性:在進行數據分析前,需進行數據清理,使每個觀測值成一行、每個變量成一列、每種觀測單元構成一張表格。
2.數據組合的必要性:數據整理好后,可能需要將多張表格組合才能進行某些分析,例如一張表保存公司名稱,另一張表保存股票價格;單個數據集也可能分割成多個,如時間序列數據按日期分在不同文件中。
二:連接數據
連接數據時將某行或某列追加到數據中的操作,適用于數據被分成多分或需將計算結果追加到現有數據集的情況。
添加行:
? ? ? ? 1.DataFrame連接:使用concat
函數,需將多個 DataFrame 放入同一個列表中,連接后可通過iloc
、loc
等方法取出子集。例如:row_concat = pd.concat([df1, df2, df3])
。
? ? ? ? 2.DataFrame和Series連接:直接用concat
連接時,由于 Series 無行索引,會添加新列且缺失值用 NaN 填充;若要將 Series 作為行連接,需創建 DataFrame 并指定列名。
? ? ? ? 3.append函數:當只需向現有 DataFrame 追加一個對象時使用,可追加 DataFrame 或 Python 字典(追加字典需傳入ignore_index = True)。例如:df1.append(new_row_df)、df1.append(data_dict,ignore_index = True)。
? ? ? ? 4.重置索引:連接多個DataFrame時,通過ignore_index = True參數可忽略后面DataFrame的索引。
添加列:
? ? ? ? 1.concat函數:與添加行類似,需傳入axis=columns
參數按列添加,可通過列名獲取子集。例如:pd.concat([df1,df2,df3],axis = 'columns')。
? ? ? ? 2.通過dataframe['列名'] = ['值']:無需調用函數,直接為DataFrame添加一列。例如:col_concat['new_col'] = ['n1,'n2','n3','n4']。
? ? ? ? 3.通過dataframe['列名'] = Series對象:
將 Series 對象作為新列添加到 DataFrame。
? ? ? ? 4.重置索引:按列合并數據后,可重置列索引獲得有序索引,如pd.concat([df1,df2,df3],axis='columns',ignore_index = True).
三:合并多個數據集
1.簡介
????????Pandas 中可通過pd.join和pd.merge實現類似數據庫的 join 操作,merge更靈活,若依據行索引合并可考慮 join函數,concat連接數據時涉及 join參數(inner或outer)。
2.加載數據
????????使用read_sql_query函數從數據庫讀取表,第一個參數為表名,第二個參數為數據庫連接對象。例如 :tracks = pd.read_sql_query("SELECT * from tracks",con)。
3.一對一合并
????????涉及兩個 DataFrame,連接的列不含重復值,通過on指定合并列,how指定連接方式(left、right、outer、inner,分別對應 SQL 中的左外連接、右外連接、全外連接、內連接)。
4.多對一合并
????????例如使用 tracks 全部數據與其他表合并,可進行數據轉換(如用to_timedelta轉換時間單位)、計算平均值等操作;還可多表合并計算,如結合用戶表、發票表、發票詳情表計算每名用戶的平均消費,通過assign方法創建新列,再按指定列分組求和排序。
5.join合并
????????可依據兩個 DataFrame 的行索引,或一個 DataFrame 的行索引與另一個的列索引合并。若有相同列名,需用lsuffix和rsuffix指定后綴;也可先設置行索引再合并。
四:總結
函數 / 方法 | 特點 | 對齊方式 | 默認連接方式 |
---|---|---|---|
concat | Pandas 函數,可垂直和水平連接兩個或多個 pandas 對象 | 只用索引對齊 | 外連接(可設為內連接) |
join | DataFrame 方法,只能水平連接兩個或多個 pandas 對象 | 靠被調用的 DataFrame 的列索引或行索引和另一個對象的行索引對齊 | 左連接(可設為內連接、外連接、右連接) |
merge | DataFrame 方法,只能水平連接兩個 DataFrame 對象 | 靠被調用的 DataFrame 的列或行索引和另一個 DataFrame 的列或行索引對齊 | 內連接(可設為左連接、外連接、右連接) |
? ? ? ? ?