Pandas中数据清理、连接数据以及合并多个数据集的方法
一、简介
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 的列或行索引对齐 | 内连接(可设为左连接、外连接、右连接) |