阿里年薪70万的数据分析师必须知道的5个Pandas数据合并技巧

1. Pandas是什么

Pandas是一个Python库,提供高性能的数据操作工具和数据结构。特别适合于数据挖掘、数据预处理、数据分析和建模。

它可以完成各种操作,例如:数据清洗、缺失值填充、转换、生成透视表、排序、统计分析等。Pandas支持多种数据类型,比如数值型、字符型、时间序列等,而且可以对这些数据进行一些高效的聚合操作。

Pandas中的两种基本数据结构是Series和DataFrame。Series是一种一维的数组,每个元素对应一个索引;而DataFrame则是一个二维的表格,包含多个Series。

2. Pandas数据合并方法

2.1 Merge

如果要将两个DataFrame合并成一个,就可以使用merge()方法。下面是一个示例,它将两个含有相同列("key")的DataFrame按照key进行合并。

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],

'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],

'value': [5, 6, 7, 8]})

merged_df = pd.merge(df1, df2, on='key')

这个操作将返回一个新的DataFrame,如下所示:

key value_x value_y
'B' 2 5
'D' 4 6

2.2 Concatenate

如果需要将两个有相同结构的DataFrame进行合并,并保留行或列的顺序,可以使用concat()方法。下面的示例演示了如何将两个DataFrame沿着行(axis=0)或列(axis=1)进行拼接。

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],

'value': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['E', 'F', 'G', 'H'],

'value': [5, 6, 7, 8]})

concatenated_df = pd.concat([df1, df2], axis=0)

这将返回一个新的DataFrame,内容如下:

key value
'A' 1
'B' 2
'C' 3
'D' 4
'E' 5
'F' 6
'G' 7
'H' 8

2.3 Join

join()方法允许通过索引(index)合并两个DataFrame。 下面的示例演示如何将两个DataFrame(t1和t2)通过它们的索引进行合并,并使用outer方法来填充缺失值:

import pandas as pd

t1 = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

t2 = pd.DataFrame([[5, 6], [7, 8], [9, 10]], columns=['C', 'D'])

joined_df = t1.join(t2, how='outer')

这将返回一个新的DataFrame,类似于下面的内容:

A B C D
1 2 5 6
3 4 7 8
NaN NaN 9 10

2.4 Merge with Multiple Keys

在某些情况下,需要使用多个键(columns)来合并两个DataFrame。这可以通过在merge()方法中显式地指定"left_on"和"right_on"参数来完成。下面的示例演示了如何使用两个键来合并两个DataFrame:

import pandas as pd

df1 = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K3'],

'key2': ['K0', 'K1', 'K0', 'K1'],

'A': ['A0', 'A1', 'A2', 'A3'],

'B': ['B0', 'B1', 'B2', 'B3']})

df2 = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K3'],

'key2': ['K0', 'K0', 'K0', 'K0'],

'C': ['C0', 'C1', 'C2', 'C3'],

'D': ['D0', 'D1', 'D2', 'D3']})

merged_df = pd.merge(df1, df2, on=['key1', 'key2'])

这将返回一个新的DataFrame,如下所示:

key1 key2 A B C D
'K0' 'K0' 'A0' 'B0' 'C0' 'D0'
'K0' 'K1' 'A1' 'B1' 'C1' 'D1'
'K1' 'K0' 'A2' 'B2' 'C2' 'D2'
'K1' 'K0' 'A2' 'B2' 'C0' 'D0'
'K1' 'K0' 'A2' 'B2' 'C2' 'D2'

2.5 Merge with Indicator

在进行DataFrame拼接操作时,可能需要知道新建行或列的来源。这可以通过传递"indicator=True"参数来解决。下面的示例演示了如何合并两个DataFrame,并在结果中添加一个指示器列:

import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],

'value1': [1, 2, 3, 4]})

df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],

'value2': [5, 6, 7, 8]})

merged_df = pd.merge(df1, df2, on='key', how='outer', indicator=True)

print(merged_df)

这将返回一个新的DataFrame,其中包含一个名为"_merge"的指示器列,其值有三种:"left_only","right_only",和"both":

key value1 value2 _merge
'A' 1.0 NaN left_only
'B' 2.0 5.0 both
'C' 3.0 NaN left_only
'D' 4.0 6.0 both
'E' NaN 7.0 right_only
'F' NaN 8.0 right_only

3. 总结

以上是一些重要的Pandas数据合并技巧。Pandas提供了多种方法用于合并数据帧,并且这些操作都是非常灵活和高效的。

然而,这些方法不应该被随意使用,而应该根据具体的需求选择最适合的方法,并检查和清理数据以确保操作的正确性和安全性。

后端开发标签